Linux系统udp模式下服务器与客户端通信(可同时多个客户端一起通讯)
2018-04-03 15:00
459 查看
//ser.c #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<netinet/in.h> int main() { int sockSer = socket(AF_INET, SOCK_DGRAM, 0); if(sockSer == -1) { perror("socket"); exit(1); } struct sockaddr_in addrSer; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(8080);//端口号 addrSer.sin_addr.s_addr = inet_addr("192.168.1.xx");//服务器地址 socklen_t addrlen = sizeof(struct sockaddr); int ret = bind(sockSer, (struct sockaddr*)&addrSer, addrlen); if(ret == -1) { perror("bind."); exit(1); } struct sockaddr_in addrCli; char sendbuf[256]; char recvbuf[256]; while(1) { recvfrom(sockSer, recvbuf, 256, 0, (struct sockaddr*)&addrCli, &addrlen); printf("Cli:>%s\n", recvbuf); printf("Ser:>"); scanf("%s",sendbuf); sendto(sockSer, sendbuf, strlen(sendbuf)+1, 0, (struct sockaddr*)&addrCli, addrlen); } close(sockSer); return 0; } //cli.c #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<netinet/in.h> int main() { int sockCli = socket(AF_INET, SOCK_DGRAM, 0); if(sockCli == -1) { perror("socket"); exit(1); } struct sockaddr_in addrSer; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(8080);//端口号 addrSer.sin_addr.s_addr = inet_addr("192.168.1.xx");//服务器地址 socklen_t addrlen = sizeof(struct sockaddr); char sendbuf[256]; char recvbuf[256]; while(1) { printf("Cli:>"); scanf("%s",sendbuf); sendto(sockCli, sendbuf, strlen(sendbuf)+1, 0, (struct sockaddr*)&addrSer, addrlen); recvfrom(sockCli, recvbuf, 256, 0, (struct sockaddr*)&addrSer, &addrlen); printf("Cli:>%s\n", recvbuf); } close(sockCli); return 0; }可实现多个客户端与服务器通讯,客户端端口号和地址必须和服务器一样
但udp模式不像tcp先进行链接,所以必须客户端先发起通讯,让服务器得到客户端的地址,才能进行通讯,而且限制每次发送的次数(客户端一句,服务器一句)还需要改进
相关文章推荐
- Java基于UDP实现服务器和多客户端之间的通信
- UDP服务器客户端相互通信
- Android客户端和服务器以TCP&&UDP方式互通之Socket通信原理
- VB.NET C#实现基于UDP的免服务器局域网多客户端点对点通讯
- Linux系统tcp模式下服务器与客户端通信(仅限一个客户端)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 基于UDP协议下的客户端与服务器之间的通信
- 【转】Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- Java-网络通信、TCP、UDP、服务器客户端的通信
- 服务器—客户端模式实现简单的通信
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- (8.13)客户端、服务器交互用json,同时去数据库检查,将0、1设置为静态常量(便于加注释它是干什么的,另外多建类,单例模式的使用)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 请教C/S端 服务器与客户端之间的通信模式是用什么样的比较好?
- 电骡协议规范(三):客户端和服务器之间的UDP通讯
- uip UDP客户端模式通信移植,本地端口可以随机
- RIA 体系中的设计模式-客户端组件到服务器的通讯(完)(翻译)
- Linux C实现简单的UDP服务器客户端通信