udp服务器源码⼤全,简单UDP服务器端和客户端(源代码)增
加了详细注解
3. #include //⼀定要包含该头⽂件因为该头⽂件包含了socket api函数声名
4.
5. using namespace std;
6.
7. #pragma comment(lib, "WS2_32.lib")  //windwows下的socket编程函数库
8.
9.
10. class CInitSock
11. {
12. public:
13.    CInitSock(int version01 = 2, int versiont02 = 2)
14.    {
15.      WORD sockVersion = MAKEWORD(2, 2); //声名⼀个存放windows⽹络编程库的版本号信息的数据
16.        WSADATA wsaData = {0};
17.
//WSAStartup函数是在程序中初始化并加载Windows⽹络
//编程库的ws2_32.dll动态库⽂件。这个很重要。
18.        if (WSAStartup(sockVersion, &wsaData) != 0)
19.        {
20.            cout <
21.
22.            exit(0); //如果WSAStartup返回值为1的话就表⽰ws2_32.dll⽂件有问题,程序退出
23.        }
24.
25.    }
26.
27.    ~CInitSock()
28.    {
29.        WSACleanup();  //在析构CInitSock类时释放ws2_32.dll动态库
30.    }
31. };
32.
33. CInitSock mysock;
34.
35. int main()
36. {
37.    SOCKET  s = 0;  //声明⼀个UDP通信的socket数据结构
38.    sockaddr_in sin = {0};  //声名⼀个socket编程类型的⽹络地址数据结构以便connect函数对本//机创建的socket数据结构进⾏初始化。
39.
40.    sin.sin_family = AF_INET; //设置⽹络协议族类型
41.    sin.sin_port = htons(4567);  //设置本地计算机的端⼝号
42.    sin.sin_addr.S_un.S_addr = INADDR_ANY; //设置本地计算机的IP地址
43.
44.    s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);  //在本机上创建⼀个socket
45.
//使⽤bind函数绑定本机的ip和打开端⼝到本机创建的socket结构上,并初始化该socket
//重点说明⼀个在服务器上是⽤bind函数来初始化socket,在UDP通信程序中客户端不需初始化
源代码大电影//socket
46.    if (bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
47.    {
48.        cout
50.        return 0;  //如果socket绑定失败返回程序0并退出程序
51.    }
52.
53.    char  buffer[1024] = "\0";  //向数据缓存区的未尾添加⼀个字符串结束符
54.    sockaddr_in addr  = {0};  //声名⼀个socket编程类型的⽹络地址数据结构⽤来保存从⽹络接收//到的数据的发送端IP地址和端⼝号
55.    int  nLen  = 0;
56.
57.    nLen = sizeof(sockaddr_in);
58.
59.    cout
61.    while (true)
62.    {
63.        int nRecv = 0;
64.
65.        cout
//recvfrom是UDP通讯程序的接收函数,recv是TCP程序的接收函数来的。
//其中recvfrom函数个个参数的意义如下:
//s是⼀个本机创建的socket结构来的
//buffer是本机⽤来存放接收到的⽹络数据的缓冲区
//1024是指定这个接收缓冲区(这⾥指buffer)的⼤⼩
//addr就是⼀个sockaddr的结构
//nLen是指⽰从⽹络上接收数据包的实际字节长度
67.        nRecv = recvfrom(s, buffer, 1024, 0, (sockaddr*)&addr, &nLen);
68.
69.        if (nRecv > 0)  //判断是否有数据接收到,如果nRecv⼤于0就表⽰接收来数据
70.        {
71.            buffer[nRecv] = '\0';
72.
73.            cout
75.    }
76.
77.    closesocket(s);  //关闭这个以经打开的socket结构
78. }
完结。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。