linux环境下的多人聊天程序设计
来源:互联网 发布:工业以太网知乎 编辑:程序博客网 时间:2024/06/06 02:44
STEP 1:老师给出了原始的程序,是功能不完善的,也就是让我们把发信息的用户名和时间啥的显示出来,这样不是比较合理嘛;原程序是可以实现传text的,就是没有用户名而已。
先跑一下(切换到你放这三文件的目录哦~):gcc -o chat chat.c 回车
然后:./chat 回车
再开一个终端:telnet 127.0.0.1 9999 回车
username:1 回车
再开一个终端:telnet 127.0.0.1 9999 回车
username:2 回车
tell 1 hello 回车
然后1那个终端就收到消息啦,也可以chat hello everyone 回车
这样相当于群聊,所有人都能收到消息,不指定某人。
STEP 2:改代码(加代码)
经我阅读代码后,决定修改chat.h里的tell_someone这个函数先,
看114行writen(chater[index].sock_fd ,new_data_p,n)==-1就是说把new_data_p这个字符串写到套接字里,执行完这条语句之后其他人的终端就会显示出new_data_p了,所以我们把username加到这个字符串里就可以,主要用的是strcat和strcpy函数。
在tell_someone这个函数里,data_p就是原本要发送的消息(我们就是改造成username : data_p),chater[slot_index].user_id是发送者的username,new_data_p就是我们新构建的字符串,构造它的过程就是106~109行。
其中我犯得错误是一开始把new_data_p定义成了char *类型,然后把chater[slot_index].user_id的值赋给它了,后来我发现这是这指针类型,如果这样赋值,相当于把chater[slot_index].user_id的指针赋值给了new_data_p,那么new_data_p和chater[slot_index].user_id相当于公用一个地址了,那么也就是说我们如果修改new_data_p的值,实质上是那个地址里存的值改了,chater[slot_index].user_id是指向那个地址的,那么间接地就修改了chater[slot_index].user_id的值,也就是修改了username啊!那么我们再找原来的username为1或者2,就找不着了,而且它实际变成了new_data_p(想想一下一个用户名叫 "1 :hello 回车" 是不是醉了……);然后就把它定义成char[]了,这样就是取值而不是取地址了,然后用strcat把username、 : 、data_p一步步往new_data_p里加,其中strcat(a,b),指的是把b加到a的末尾,所以要保证a有足够的空间还能容纳b哦!~
STEP 3:修改chat_all和tell_someone是一样的,一共就改了三个地方,自己看看代码吧~如果想加上系统时间啥的,同理~
话说这个原理,还是大二上java实验时候学到的……很意外地从老师和同学(三儿)那得到的思路,挺好的~就是把自己的用户名和要发送的消息一起发给对方的做法~挺好的~觉得好有哲理哦~
- linux环境下的多人聊天程序设计
- 基于linux下的聊天程序设计与实现
- 学习linux环境下汇编的好书《汇编语言程序设计》
- Windows环境下的C程序设计环境
- Windows环境下的C程序设计环境
- linux环境下基于udp socket简单聊天通信
- Linux下常用的“聊天”命令
- linux下基于socket的聊天软件
- Linux下常用的“聊天”命令
- Linux下常用的“聊天”命令
- 基于linux下的局域网聊天
- linux下的chat程序设计
- Linux下的定时器-程序设计
- Linux下的定时器-程序设计
- linux下聊天
- Linux环境下C语言网络程序程序设计
- Linux下 MPI 并行程序设计开发环境搭建
- 多线程实现socket()下的多人聊天实验
- zookeeper安装
- 《中国科技纵横》杂志
- python数据类型总结
- Linux用户空间线程管理介绍之二:创建线程堆栈
- logfile
- linux环境下的多人聊天程序设计
- 聚类算法
- [UOJ 111][APIO 2015]Jakarta Skyscrapers(Dijkstra+pbds堆暴力)
- 几种判断素数的办法。
- 策略模式
- 用JavaScript实现模块切换
- sql 基本语句
- 随笔分类 - 代码评析与重构
- Linux gcc编写线程时的问题