基于UDP的socket编程

UDP服务器代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* 基于udp的socket编程
*/
 
/*
* udp服务器端代码
*/
 
#include<winsock2.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<ws2tcpip.h>
 
#pragma comment(lib, "WS2_32.lib")
 
using namespace std;
 
int main()
{
    WSADATA data;                           //定义结构体变量
    WORD w = MAKEWORD(2, 0);               //定义套接字版本
    ::WSAStartup(w, &data);                //初始化套接字库
    SOCKET s;                              //定义套接字句柄
    s = ::socket(AF_INET, SOCK_DGRAM, 0);  //创建UDP套接字
    sockaddr_in addr;                      //套接字地址结构变量
    int n = sizeof(addr);                  //地址结构变量大小
    addr.sin_family = AF_INET;
    addr.sin_port = htons(75);
    addr.sin_addr.S_un.S_addr = INADDR_ANY;
    ::bind(s, (sockaddr*)&addr, sizeof(addr));     //绑定套接字
    cout << "UDP服务器启动..." << endl;
    char buffer[10] = { 0 };
    sockaddr_in addr2;
    char sztext[] = "欢迎你\n";               //发送到客户端的数据
 
    char clientAddr[30];
    while (true)
    {
        //接受客户端的信息
        if (::recvfrom(s, buffer, 10, 0, (sockaddr*)&addr2, &n) != 0)
        {
            cout << "已经连接上" << inet_ntop(AF_INET, &addr2.sin_addr, clientAddr, 30) << endl;
            cout << buffer << endl;
            //发送数据到客户端
            ::sendto(s, sztext, sizeof(sztext), 0, (sockaddr*)&addr2, n);
            break;
        }
    }
 
    ::closesocket(s);
    ::WSACleanup();
 
    if (getchar())
    {
        return 0;
    }
    else
    {
        ::Sleep(100);
    }
 
}

  UDP客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
* UDP客户端代码
*/
 
#include<winsock2.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<ws2tcpip.h>
 
#pragma comment(lib, "WS2_32.lib")                  //显示连接套接字库
 
using namespace std;
 
int main()
{
    WSADATA data;
    WORD w = MAKEWORD(2, 0);
    ::WSAStartup(w, &data);
    SOCKET s;
    s = ::socket(AF_INET, SOCK_DGRAM, 0);              //创建UDP套接字
    sockaddr_in addr, addr2;
    int n = sizeof(addr);
    char buff[10] = { 0 };
    addr.sin_family = AF_INET;
    addr.sin_port = htons(75);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.S_un.S_addr);
    cout << "UDP客户端已启动" << endl;
    char sztext[] = "你好\n";
 
    //发送信息
    if (::sendto(s,sztext,sizeof(sztext), 0, (sockaddr*)&addr, n)!=0)
    {
        ::recvfrom(s, buff, 10, 0, (sockaddr*)&addr2, &n);
        cout << "服务器说:" << buff << endl;
        ::closesocket(s);
        ::WSACleanup();
    }
 
    if (getchar())
    {
        return 0;
    }
    else
    {
        ::Sleep(100);
    }
 
 
}

  

posted on   xcxfury001  阅读(87)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示