网络通信_UDP客户端以及服务器
2017-03-24 14:30
369 查看
UDP协议
UDP位于IP层之上,每个UDP报文分为UDP报头和UDP数据两个部分;报头由四个16位长字段组成,如下图所示:
UDP客户端与服务器通信流程图
具体代码
客户端:#include<stdio.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsa; SOCKET serversoc; SOCKADDR_IN serveraddr; SOCKADDR_IN peeraddr; int peer_len=sizeof(peeraddr); char Recv_buf[64]; //char *Server_IP="127.0.0.1"; char *Send_data="Hello,server!"; int Send_len=strlen(Send_data); int time_out=2000; //接收超时 int result; WSAStartup(WINSOCK_VERSION,&wsa); //初始化WS2_32.DLL //命名协议,IP,端口 serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(13); serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(serveraddr.sin_addr.s_addr==INADDR_NONE) { printf("不可用地址!\n"); return -1; } //创建套接字 serversoc = socket(AF_INET,SOCK_DGRAM,0); result = setsockopt(serversoc,SOL_SOCKET,SO_RCVTIMEO,(char*)&time_out,sizeof(time_out)); for(int i=0;i<3;i++) { //发送数据 result = sendto(serversoc,Send_data,Send_len,0,(SOCKADDR *)&serveraddr,sizeof(serveraddr)); //接收数据 result = recvfrom(serversoc,Recv_buf,64,0,(SOCKADDR *)&peeraddr,&peer_len); if(result >= 0) { Recv_buf[result]= 0; printf("接收数据为: %s \n",Recv_buf); } } closesocket(serversoc); WSACleanup(); return 0; }
服务端:
#include<stdio.h> #include<winsock2.h> #include<time.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsa; WSAStartup(WINSOCK_VERSION,&wsa); //初始化WS2_32.DLL SOCKET serversoc; SOCKET clientsoc; SOCKADDR_IN serveraddr; SOCKADDR_IN clientaddr; int client_len = sizeof(clientaddr); int server_len = sizeof(serveraddr); char *Send_data; int Send_len; char Recv_buf[64]; int result; time_t nowtime; //命名协议,IP,端口 serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(13); serveraddr.sin_addr.s_addr = INADDR_ANY; //创建socket serversoc = socket(AF_INET,SOCK_DGRAM,0); //绑定socket result=bind(serversoc, (SOCKADDR *)&serveraddr, server_len); if(result==SOCKET_ERROR) { printf("套接字绑定失败!\n"); closesocket(serversoc); return -1; } printf("Server is running.....\n"); clientsoc = socket(AF_INET,SOCK_DGRAM,0); while(1) { //接收数据 result = recvfrom(serversoc,Recv_buf,64,0,(SOCKADDR *)&clientaddr,&client_len); if(result >= 0) { Recv_buf[result]= 0; printf("接收数据为: %s \n",Recv_buf); //发送数据 nowtime=time(0); Send_data=ctime(&nowtime); Send_len=strlen(Send_data); result = sendto(clientsoc,Send_data,Send_len,0,(SOCKADDR *)&clientaddr,sizeof(clientaddr)); printf("Server is running.....\n"); } } closesocket(serversoc); WSACleanup(); return 0; }
参考文章:
http://blog.csdn.net/lovecodeless/article/details/25388291 http://blog.csdn.net/mao834099514/article/details/52763490?locationNum=2&fps=1
相关文章推荐
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- Java-网络通信、TCP、UDP、服务器客户端的通信
- UDP数据读写以及服务器客户端的通信
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- 简单的网络通信程序,客户端发送hello,server 服务器反馈 ok UDP
- 基于TCP/UDP的Socket网络通信系列之客户端与服务器的简单对话(三)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 【Linux网络编程实例】实例二:利用TCP协议进行客户端与服务器通信
- Android开发——本机Tomcat搭建服务器,客户端socket网络连接不上问题以及D-LINK端口转发设置
- linux c之网络编程之TCP(服务器和和客户端基础通信)
- Linux C实现简单的UDP服务器客户端通信
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Socket 通信原理 -- Android客户端和服务器以TCP&&UDP方式互通
- Java基于UDP实现服务器和多客户端之间的通信
- Linux网络编程[UDP客户端服务器的编程模型]
- JAVA 网络通信中 服务器与客户端新建IO流的顺序问题
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- UDP简单实现并发服务器和客户端简单通信