基于UDP(面向无连接)socket编程

一.基于UDP(面向无连接)socker编程的服务器端(也叫接收端)程序流程如下:

(1)    创建套接字(socket

(2)    将套接字绑定到一个本地地址和端口上(bind

(3)    等待接收数据(recvfrom

(4)    关闭套接字

. 基于UDP(面向无连接)socket编程的客户端程序流程如下:

1)创建套接字(socket

2)向服务器发送数据(sendto

4)关闭套接字

三. 实现举例

      服务器端:

 
  
  1. #include <WINSOCK2.H>  
  2. #include <stdio.h>  
  3.  
  4. void main()  
  5. {  
  6.     //加载套接字库  
  7.     WORD wVersionRequest;  
  8.     WSADATA wsData;  
  9.     int err;  
  10.     wVersionRequest = MAKEWORD(1,1);  
  11.  
  12.     err = WSAStartup(wVersionRequest,&wsData);  
  13.     if (err != 0)  
  14.     {  
  15.         return;  
  16.     }  
  17.  
  18.  
  19.     if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)  
  20.     {  
  21.         WSACleanup();  
  22.         return;  
  23.     }  
  24.  
  25.  
  26.     //创建套接字  
  27.     SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);  
  28.  
  29.  
  30.     SOCKADDR_IN addrSrv;  
  31.     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  32.     addrSrv.sin_family = AF_INET;  
  33.     addrSrv.sin_port = htons(6000);  
  34.  
  35.     //绑定套接字  
  36.     bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  
  37.  
  38.     //等待并接受数据  
  39.     SOCKADDR_IN  addrClient;  
  40.     int len = sizeof(SOCKADDR);  
  41.  
  42.     char recvBuf[100]; //存储接收的数据  
  43.     recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);  
  44.  
  45.     printf("%s\n", recvBuf);  
  46.  
  47.     //关闭套接字  
  48.     closesocket(sockSrv);  
  49.     WSACleanup();  

        客户端

 

 
  
  1. #include <WINSOCK2.H>  
  2. #include <stdio.h>  
  3.  
  4.  
  5. void main()  
  6. {  
  7.  
  8.     //加载套接字库  
  9.     WORD wVersionRequest;  
  10.     WSADATA wsData;  
  11.     int err;  
  12.     wVersionRequest = MAKEWORD(1,1);  
  13.       
  14.     err = WSAStartup(wVersionRequest,&wsData);  
  15.     if (err != 0)  
  16.     {  
  17.         return;  
  18.     }  
  19.       
  20.       
  21.     if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)  
  22.     {  
  23.         WSACleanup();  
  24.         return;  
  25.     }  
  26.  
  27.     //创建套接字  
  28.      SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);  
  29.  
  30.      SOCKADDR_IN addrSrv;  
  31.      addrSrv.sin_family = AF_INET;  
  32.      addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  
  33.      addrSrv.sin_port = htons(6000);  
  34.  
  35.      //发送数据  
  36.      sendto(sockClient, "Hello", strlen("Hello")+1, 0, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  
  37.  
  38.      //关闭套接字  
  39.      closesocket(sockClient);  
  40.      WSACleanup();