#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;
}
结果
与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;
}