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 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler
    • ¥15 关于#python#的问题:自动化测试