Bonjir 2022-11-17 12:41 采纳率: 71.4%
浏览 25
已结题

connect()函数失败,WSAGetLastError返回10061,如何解决?

用socket做了个网络通讯的程序,在同一个电脑上可用,但是把程序放在另一个电脑上时就出现了错误。
(两个电脑都连着我的手机热点)
connect()函数失败,WSAGetLastError返回10061.
请问这是什么引起的?


#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS

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

#include <WinSock2.h>
#include <stdio.h>

#define SERVERPORT 6000    //服务端口号

int main(int argc, char *argv[])
{
    //加载套接字库
    WORD wVersionRequested;
    WSAData wsaData;
    int err;

    printf("This is a Client side application!\n");

    wVersionRequested = MAKEWORD(2, 2);

    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0)
    {
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        printf("WSAStartup() called failed!\n");
        return -1;
    }
    else
    {
        printf("WSAStartup() called successful!\n");
    }

    if (LOBYTE(wsaData.wVersion) != 2 ||
        HIBYTE(wsaData.wVersion) != 2) {
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        WSACleanup();
        return -1;
    }

    /* The WinSock DLL is acceptable. Proceed. */

    //创建套接字
    SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
    if (sockClient == INVALID_SOCKET)
    {
        printf("socket() called failed! ,error code is: %d", WSAGetLastError());
        return -1;
    }
    else
    {
        printf("socket() called successful!\n");
    }

    //需要连接的服务端套接字结构信息
    SOCKADDR_IN addrServer;
    addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//设定服务器的IP地址
    addrServer.sin_family = AF_INET;
    addrServer.sin_port = htons(SERVERPORT);//设定服务器的端口号(使用网络字节序)

    //向服务器发出连接请求
    err = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
    if (err == SOCKET_ERROR)
    {
        printf("connect() called failed! The error code is: %d\n", WSAGetLastError());
        return -1;
    }
    else
    {
        printf("connect() called successful\n");
    }

    //接收数据
    char recvBuf[100] = { 0 };
    recv(sockClient, recvBuf, 100, 0);
    printf("receive data from server side is: %s\n", recvBuf);

    //发送数据
    send(sockClient, "This is a client side!\n", strlen("This is a client side!\n") + 1, 0);

    //关闭套接字
    closesocket(sockClient);

    //终止套接字库的使用
    WSACleanup();

    system("pause");
    return 0;
}
// 引用自https://blog.csdn.net/ccf19881030/article/details/16987819


  • 写回答

2条回答 默认 最新

  • 叶落花枯 2022-11-17 14:05
    关注

    你的服务器在哪里啊,服务器ip地址怎么可能是127.0.0.1,这个是电脑本机回环网卡地址,只能在本机测试用的,不能跨设备使用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 已采纳回答 11月19日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。