云主机无法收到UDP信号的解决

网络相关 专栏收录该内容
23 篇文章 2 订阅

// UDPSERVICE.cpp
#include <Windows.h>
#include "stdafx.h"
#include "WinSock.h"

#define SOCK_VER 0x05
#define udp_port 6001

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

int UDPSERVICE(){
    SOCKET g_sock;
    //初始化环境
    WSADATA wd = {0};
    int nStart = WSAStartup(MAKEWORD(SOCK_VER,0),&wd);//函数成功返回0,失败返回错误代码
    //错误处理
    if (0 != nStart){
        return 0;
    }
 
    if (2 != LOBYTE(wd.wVersion))
    {
        return 0;
    }
 
    //创建socket套接字
    g_sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if (INVALID_SOCKET == g_sock){
        //sprinf(_T("无效的socket"));
        return 0;
    }
 
    //LogEvent(_T("socket 创建成功!"));
 
    //绑定
    sockaddr_in addr = {0};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(udp_port);
    addr.sin_addr.s_addr = inet_addr("172.1.0.8"); 

//云主机采用的公网IP配置是映射的,无法直接绑定,这里用ipconfig/all看到的是172.x.x.x的IP。如果只绑定127.0.0.1无法接收到。绑定172的IP就可以了。   
 
    int nBind;
    nBind = bind(g_sock,(sockaddr *)&addr,sizeof(addr));//成功返回0
    if (0 != nBind){
        printf("绑定IP失败");
        return 0;
    }
 
    //获得已经绑定的端口号
    int nLen = sizeof(addr);
    getsockname(g_sock,(sockaddr *)&addr,&nLen);
 
    printf("socket 成功绑定到端口:%d,等待数据。。。\n",ntohs(addr.sin_port));
 
    //等待并接收数据
    sockaddr_in saClient = {0};
    int nFromLen = sizeof(saClient);
    char szBuff[256] = {0};
    int nSent = 0;
    while(1){
        recvfrom(g_sock,szBuff,256,0,(sockaddr *)&saClient,&nFromLen);        
 
        if(nFromLen>0){
            printf("收到的信息:%s,从%s,%d \n",szBuff,inet_ntoa(saClient.sin_addr),ntohs(saClient.sin_port));
            
            //向客户端发送回应
            strcpy_s(szBuff,"OK!");
            nSent = sendto(g_sock,szBuff,strlen(szBuff)+1,0,(sockaddr *)&saClient,sizeof(saClient));
        }

        Sleep(10);
        if (0 == nSent){
            printf("WSAGetLastError:%d",WSAGetLastError());
        }else{
            printf("成功发出回应!!\n"); 
        }
    }
 
    //关闭资源
    closesocket(g_sock);//关闭套接字
 
    WSACleanup();//清理环境

    return 1;
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页

打赏作者

chengg0769

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值