【Windows socket】基于TCP服务器端不可绑定端口的问题

基本函数

Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载。
这里使用#pragma命令,在编译时加载

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

使用DLL之前,还需要调用 WSAStartup() 函数进行初始化

WSAStartup() 函数

函数原型

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

wVersionRequested 为 WinSock 规范的版本号,低字节为主版本号,高字节为副版本号(修正版本号);

lpWSAData 为指向 WSAData 结构体的指针。

出现问题

if(bind(servSock, (SOCKADDR*)&sockAddr, sizeof(sockAddr))!=0)
 {
  printf("error");
  //return -1;
 }

运行结果:在这里插入图片描述
无法绑定指定端口。

原因


```c
int main()
{
  char *str = "Hello World!";
  SOCKET servSock= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
  SOCKET clntSock;
  SOCKADDR_IN sockAddr;
  SOCKADDR_IN clntAddr;
  int nSize = sizeof(SOCKADDR);
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,0), &wsaData);

未初始化Winsock就创建了套接字,导致连接失败。

解决

将创建套接字的代码放在初始化winsock代码后即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值