基于UDP的服务器和客户端之间的通信
2017-05-25 17:49
736 查看
服务器:
1、创建套接字
sock=socket(AF_INET,SOCK_DGRAM,0)
2、绑定
0.0.0.0:8080 让操作系统自由分配一个有效的IP
3、收数据
4、发数据
代码:
客户端:
1、创建套接字
sock=socket(AF_INET,SOCK_DGRAM,0)
2、发数据
3、收数据
代码:
1、创建套接字
sock=socket(AF_INET,SOCK_DGRAM,0)
2、绑定
0.0.0.0:8080 让操作系统自由分配一个有效的IP
3、收数据
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
4、发数据
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
代码:
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> static void use(char* proc) { printf("%s [server_ip][server_port]\n",proc); } int main(int argc,char* argv[]) { if(argc!=3) { use(argv[0]); return 1; } //创建套接字 int sock = socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { perror("socket"); return 3; } struct sockaddr_in local; local.sin_family = AF_INET; local.sin_port =htons(atoi(argv[2])); local.sin_addr.s_addr = inet_addr(argv[1]); socklen_t len = sizeof(local); //绑定 if(bind(sock,(struct sockaddr*)&local,len)<0) { perror("bind"); return 4; } char buf[1024]; struct sockaddr_in client; socklen_t _len=sizeof(client); while(1) { //收数据 ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0, (struct sockaddr*)&client,&_len ); if(s>0) { printf("Client say#%s",buf); } else { perror("recvfrom"); return 5; } //发数据 ssize_t _s = sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&client,len); if(_s<0) { perror("sendto"); return 6; } } close(sock); return 0; }
客户端:
1、创建套接字
sock=socket(AF_INET,SOCK_DGRAM,0)
2、发数据
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
3、收数据
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
代码:
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<string.h> static void use(char* proc) { printf("%s [server_ip][server_port]\n",proc); } int main(int argc,char* argv[]) { if(argc!=3) { use(argv[0]); return 1; } //创建套接字 int sock =socket(AF_INET,SOCK_DGRAM,0) ; struct sockaddr_in peer; peer.sin_family = AF_INET; peer.sin_port = htons(atoi(argv[2])); peer.sin_addr.s_addr = inet_addr(argv[1]); char buf[1024]; while(1) { printf("please enter#"); fflush(stdout); ssize_t s = read(0,buf,sizeof(buf)-1); if(s>0) { //发数据 ssize_t _s = sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&peer,sizeof(peer)); if(_s<0) { perror("sendto"); return 2; } } //收数据 ssize_t r =recvfrom(sock,buf,sizeof(buf)-1,0,NULL,NULL); if(r<0) { perror("recvfrom"); return 3; } else { printf("server echo#%s",buf); } } close(sock); return 0; }
相关文章推荐
- Java基于UDP实现服务器和多客户端之间的通信
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- 基于UDP协议下的客户端与服务器之间的通信
- Java基于TCP实现服务器和多客户端之间的通信
- 基于UDP 实现客户端之间通信【2】
- java服务器与linux c客户端之间udp通信
- 客户端与服务器之间分别通过TCP和UDP进行通信
- 基于TCP/UDP的Socket网络通信系列之客户端与服务器的简单对话(三)
- 【转】Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 请教C/S端 服务器与客户端之间的通信模式是用什么样的比较好?
- Socket 通信原理 -- Android客户端和服务器以TCP&&UDP方式互通
- 服务器与客户端之间通信格式以及协议字
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 电骡协议规范(三):客户端和服务器之间的UDP通讯
- udp客户端与服务端之间的通信实例
- 基于GUI编程时,如何在客户端与服务器之间传递对象
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- VB.NET C#实现基于UDP的免服务器局域网多客户端点对点通讯
- 用TcpTrace监控OpenERP客户端和服务器之间的通信
- 初探基于TCP的服务器/客户端结构的聊天系统(二)之应用层通信协议设计