jammy.wang 2019-03-23 18:03
浏览 1084

windows下C++网络编程,发送组播报文,sendto()函数发送失败,WSAGetLastError()返回错误码为5

1:windows下C++网络编程,发送组播报文,sendto()函数发送失败,WSAGetLastError()返回错误码为5

2:代码如下:
// WinsockServer_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include
#include

const int MAX_BUF_LEN = 10;
// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

// 启动socket api
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
    return -1;
}

if (LOBYTE(wsaData.wVersion) != 2 ||
    HIBYTE(wsaData.wVersion) != 2)
{
    WSACleanup();
    return -1;
}

// 创建socket
SOCKET connect_socket;
connect_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == connect_socket)
{
    err = WSAGetLastError();
    printf("error! error code is %d/n", err);
    return -1;
}

SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(3779);
//sin.sin_addr.s_addr = INADDR_BROADCAST;
sin.sin_addr.s_addr = inet_addr("224.0.0.22");//设置广播地址,window下用这种形式方可

bool bOpt = true;
//设置该套接字为广播类型
if (setsockopt(connect_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt)) == SOCKET_ERROR) {
    printf("setsockopt error");
    return -1;
}

if (setsockopt(connect_socket, SOL_SOCKET, SO_DEBUG, (char*)&bOpt, sizeof(bOpt)) == SOCKET_ERROR) {
    printf("setsockopt error");
    return -1;
}

setsockopt(connect_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt));
int nAddrLen = sizeof(SOCKADDR);

char buff[MAX_BUF_LEN] = "";
while (1)
{
    sprintf_s(buff, "%s","ss");

    // 发送数据
    int nSendSize = sendto(connect_socket, buff, strlen(buff), 0, (SOCKADDR*)&sin, nAddrLen);
    if (SOCKET_ERROR == nSendSize)
    {
        err = WSAGetLastError();
        printf("error!, error code is %d/n", err);
        return -1;
    }
    printf("Send: %s/n", buff);
    Sleep(500);
}
return 0;

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
    • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序