Linux网络编程实现客户端服务端收发数据功能

来源:互联网 发布:结构设计软件 编辑:程序博客网 时间:2024/06/05 02:58

客户端代码

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(void){int st = socket(AF_INET, SOCK_STREAM, 0);//初始化socketstruct sockaddr_in addr; // 定义一个IP地址的结构memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;// 设置结构地址类型为TCP/IP地址addr.sin_port = htons(8080); // 制定一个端口号:8080,htons:将short类型从host字节类型转到net字节类型// 将字符类型的IP地址转化为int,赋给addr结构//addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_addr.s_addr = inet_addr("192.168.10.210");//if (connect(st, (struct sockaddr *)&addr, sizeof(addr)) == -1){printf("connect failed %s\n", strerror(errno));return EXIT_FAILURE;}char s[1024];memset(s, 0, sizeof(1024));strcpy(s, "hello world");if (send(st, s, strlen(s), 0) == -1){printf("send failed %s\n", strerror(errno));}//sleep(100);close(st);return EXIT_SUCCESS;}


服务端代码

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(int arg, char *args[]){int st = socket(AF_INET, SOCK_STREAM, 0); //初始化socketint on = 1;if (setsockopt(st, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1){printf("setsockopt failed %s\n", strerror(errno));return EXIT_FAILURE;}struct sockaddr_in addr; // 定义一个IP地址结构memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; // 将addr结构的属性定位为TCP/IP地址addr.sin_port = htons(8080); // 将本地字节顺序转化为网络字节顺序addr.sin_addr.s_addr = htonl(INADDR_ANY); // INADDR_ANY代表这个server上所有的地址// 将ip与server程序绑定if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1){printf("bind failed %s\n", strerror(errno));return EXIT_FAILURE;}// server端开始listenif (listen(st, 20) == -1){printf("listen failed %s\n", strerror(errno));return EXIT_FAILURE;}//printf("listen success\n");char s[1024];int client_st = 0;struct sockaddr_in client_addr; // 表示client端的IP地址int i;for (i = 0; i < 5; i++){memset(&client_addr, 0, sizeof(client_addr));socklen_t len = sizeof(client_addr);// accept会阻塞,直到有客户端连接过来,accept返回client的socket描述符client_st = accept(st, (struct sockaddr*) &client_addr, &len);if (client_st == -1){printf("accept failed %s\n", strerror(errno));return EXIT_FAILURE;}/* 第一个版本memset(s, 0, sizeof(1024));if (recv(client_st, s, sizeof(s), 0) == -1){printf("recv failed %s\n", strerror(errno));close(client_st);return EXIT_FAILURE;}printf("revc is %s\n", s);close(client_st);*/// 第二个版/*while (1){memset(s, 0, sizeof(1024));if (recv(client_st, s, sizeof(s), 0) > 0){printf("revc is %s\n", s);} else{printf("recv failed %s\n", strerror(errno));break;}}close(client_st);*/// 第三个版本while (1){memset(s, 0, sizeof(1024));int rc = recv(client_st, s, sizeof(s), 0);// 是阻塞调用if (rc > 0){printf("revc is %s\n", s);} else{if (rc == 0){printf("client socket closed\n");}else{printf("recv failed %s\n", strerror(errno));}break;}}close(client_st);}close(st);return 0;}

makefile文件内容

.SUFFIXES:.c .oCC=gccSRCS1=sock.cSRCS2=server.cOBJS1=$(SRCS1:.c=.o)OBJS2=$(SRCS2:.c=.o)EXEC1=clientEXEC2=serverall: $(OBJS1) $(OBJS2) $(CC) -o $(EXEC1) $(OBJS1) $(CC) -o $(EXEC2) $(OBJS2) @echo '----------------ok------------'.c.o:$(CC) -Wall -g -o $@ -c $<clean:rm -f $(OBJS1)rm -f core*



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4g移动网络慢怎么办 房间没有4g网络怎么办 oppo显示2g网络怎么办 oppo只有2g网络怎么办 移动卡4g网络慢怎么办 易信专线电话用完了怎么办 手机拨打电话时黑屏怎么办 网易号文章一直审核中怎么办 登陆积分会员忘记密码怎么办 易信密码忘记了怎么办 滴滴永久封停的号怎么办 微信版本过低怎么办 报关时通关单号没录怎么办 公司注销了行政许可证怎么办呢 报关项数超过50项怎么办 出口报关件数报多了怎么办 关税少交被海关缉私查到怎么办 外贸报关hs编码报错怎么办 报关金额少报了怎么办 进口报关金额少报了怎么办 报关重量报少了怎么办 金额报多100倍怎么办 ems没扫描到单号怎么办 回国海关被税了怎么办 代购买错东西了怎么办 征信报告有逾期怎么办 evus信息填错了怎么办 清关一个月了该怎么办 清关一直不发怎么办 清关一个月了怎么办 香港ems到西安海关税怎么办 寄东西被海关扣留怎么办 天津港新舱单品名错误核销怎么办 移动手机不能用联通卡怎么办 移动手机联通卡网速卡怎么办 移动手机不支持联通4g怎么办 汽车分离轴承异响怎么办 至尊宝被冻结了怎么办 qq冻结了至尊宝怎么办 至尊宝没办法申诉怎么办 至尊宝qq被冻结怎么办