lucia1112 2023-12-02 10:32 采纳率: 0%
浏览 4

mingw64+msys2

1 使用mingw64和 msys2移植linux C的socket服务器端代码到windows平台(代码未做任何修改,使用linux中头文件),生成windows的.exe可执行程序,编译成功(编译时添加-lws2_32)。
但是执行 socket(AF_INET, SOCK_STREAM, 0); 时返回-1
2 使用cygwin编译代码,编译通过,执行情况一样

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-02 12:01
    关注

    【以下回答由 GPT 生成】

    ### 解决方案
    
    根据你描述的情况,你已经成功地将代码移植到Windows平台,并且使用了-lws2_32选项进行编译。然而,你在执行socket(AF_INET, SOCK_STREAM, 0)时遇到了问题,返回值是-1。
    
    这种情况通常是由于在Windows下调用socket函数时需要先初始化Winsock库。你需要在代码中添加对Winsock库的初始化和清理代码。
    
    以下是具体的解决方案:
    
    1. 在代码中包含Winsock库的头文件:
    
       ```c
       #include <winsock2.h>
       ```
    
    2. 初始化Winsock库,在调用socket函数之前加入以下代码:
    
       ```c
       WSADATA wsaData;
       if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
           // 处理初始化失败的情况
       }
       ```
    
    3. 在程序结束时清理Winsock库,在关闭socket和退出程序之前加入以下代码:
    
       ```c
       WSACleanup();
       ```
    
    4. 最后重新编译代码并执行,应该能够成功调用socket函数并返回正确的套接字描述符。
    
    希望以上方法能够解决你的问题。
    

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月2日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路