资源描述
南华大学tcpip课程设计实验报告
15
2020年4月19日
文档仅供参考,不当之处,请联系改正。
根据老师这个学期所讲的tcpip协议内容,写的一个经过TCP协议,用C语言实现的同步聊天程序,中间测试环节,花了很多时间一直弄不出来,也问了很多班级里面的人,最后才搞定。对字符串处理比较充分
客户端源代码:
服务器源代码
编译源代码:
gcc -Wall chq.c -o chq
gcc -Wall server.c -o server
运行客户端程序:
.chq 192.168.1.123 4567
运行服务器程序:
.server 192.168.1.123 4567
运行的结果:
客户端部分代码思路
建立socket
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket");
exit(errno);
}else
printf("socket create success!\n");
设置服务器ip
bzero(&s_addr, sizeof(s_addr));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(port);
if (inet_aton(argv[1], (struct in_addr *)&s_addr.sin_addr.s_addr) == 0) {perror(argv[1]);
exit(errno);}
连接服务器*
if(connect(sockfd,(struct sockaddr*)&s_addr,sizeof(struct sockaddr)) == -1){perror("connect");
exit(errno);}else
printf("conncet success!\n");
服务器的部分代码思路
设置侦听队列长度
if(argv[3])
listnum = atoi(argv[3]);
else
listnum = 3;
设置服务器ip
bzero(&s_addr, sizeof(s_addr));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(port);
if(argv[1])
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
else
s_addr.sin_addr.s_addr = INADDR_ANY;
把地址和端口帮定到套接字上
if((bind(sockfd, (struct sockaddr*) &s_addr,sizeof(struct sockaddr))) == -1){
perror("bind");
exit(errno);
}else
printf("bind success!\n");
侦听本地端口
if(listen(sockfd,listnum) == -1){
perror("listen");
exit(errno);
}else
展开阅读全文