Asialing 2022-02-27 22:43 采纳率: 81.8%
浏览 56
已结题

socket在Windows上面创建失败/c语言


#include <stdio.h>
#include <winsock2.h>
#include <sys/types.h>
#include <stdlib.h>


int main() {

    //使用socket函数创建套接字
    //创建一个用于UDP网络编程的套接字
    int sockfd;//创建来接收socket的返回值
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        perror("Socket调用失败");
        exit(1);//退出程序
    }

    printf("sockfd = %d\n", sockfd);

    return 0;
}

结果

img

  • 写回答

1条回答 默认 最新

  • seh_sjlj 2022-02-27 22:57
    关注

    Linux不同,Windows上使用socket稍微麻烦点,需要先进行初始化。并且socket的返回值是SOCKET,而不是int。出错之后也并不会设置errno,因此perror会输出No error。要想知道出了什么错,要调用WSAGetLastError函数获得错误代码,并在Microsoft Docs上查阅对应代码的含义。
    以下代码能够成功运行:

    #include <stdio.h>
    #include <winsock2.h>
    #include <stdlib.h>
    
    int main()
    {
        // 初始化Winsock库
        WSADATA wsadata;
        if(WSAStartup(MAKEWORD(2, 2), &wsadata))
        {
            puts("WSAStartup failed.");
            return 1;
        }
        // 创建socket
        SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
        if(sock == INVALID_SOCKET)
        {
            puts("Socket creation failed.");
            return 1;
        }
        printf("sockfd = %u\n", sock);
        // 关闭socket,回收内存
        closesocket(sock);
        WSACleanup();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥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