Windows C++ 网络编程Udp

3 篇文章 1 订阅
本文档展示了如何使用C++和Winsock库在Windows平台上创建一个UDP服务器和客户端。服务器监听8888端口,接收客户端发送的数据并回应。客户端连接到服务器,输入数据并显示接收到的响应。注意,部分接口已被弃用,编译时需关闭SDL检查。
摘要由CSDN通过智能技术生成

服务器

#include <winsock2.h> 
#include<iostream>

#pragma comment(lib,"ws2_32.lib")  

int main(int argc, char* argv[])
{
    WSADATA wsaData;
    WORD sockVersion = MAKEWORD(2, 2);
    if (WSAStartup(sockVersion, &wsaData) != 0)
    {
        return 0;
    }

    SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (serSocket == INVALID_SOCKET)
    {
        std::cout << "socket error !" << std::endl;
        return 0;
    }

    sockaddr_in serAddr;
    serAddr.sin_family = AF_INET;
    serAddr.sin_port = htons(8888);
    serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
    if (bind(serSocket, (sockaddr*)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
    {
        std::cout << "bind error !" << std::endl;
        closesocket(serSocket);
        return 0;
    }

    sockaddr_in remoteAddr;
    int nAddrLen = sizeof(remoteAddr);
    while (true)
    {
        char recvData[255]={ '/0' };
        int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr*)&remoteAddr, &nAddrLen);
        if (ret > 0)
        {    
            std::cout << "接受到一个连接" << inet_ntoa(remoteAddr.sin_addr)<<std::endl;
            std::cout << "接收数据为:"<< recvData << std::endl<< std::endl;
        }

        const char* sendData = "服务端收到\n";
        sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr*)&remoteAddr, nAddrLen);

    }
    closesocket(serSocket);
    WSACleanup();
    return 0;
}

客户端

#include <iostream>
#include <winsock2.h>
#include <string>

#pragma comment(lib,"ws2_32.lib")  

int main(int argc, char* argv[])
{
    WORD socketVersion = MAKEWORD(2, 2);
    WSADATA wsaData;
    if (WSAStartup(socketVersion, &wsaData) != 0)
    {
        return 0;
    }
    SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(8888);
    sin.sin_addr.S_un.S_addr = inet_addr("192.168.138.1");
    int len = sizeof(sin);
    while (true)
    {
        std::string strData;
        std::cout << "请输入" << std::endl;
        std::cin >> strData;
        const char* sendData = strData.c_str();
        sendto(sclient, sendData, strlen(sendData), 0, (sockaddr*)&sin, len);

        char recvData[255] = { '/0' };
        int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr*)&sin, &len);
        if (ret > 0)
        {
            std::cout << recvData << std::endl;
        }
    }

    closesocket(sclient);
    WSACleanup();
    return 0;
}

同上篇一样
部分接口已被弃用;
vs记得设置 属性->C/C++常规->SDL检查->否
否则编译不过

参考

Windows C++ 网络编程
[windows网络编程]tcp/udp编程初步详解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值