windows - win32 套接字绑定函数失败,错误 10014 c++
问题描述
我正在尝试在我的机器上运行一个 tcp 服务器,这主要是一个教程代码,但由于某种原因,绑定失败并出现错误 10014。如果有人感兴趣,sizeof(serverAddr) 在下面的代码中返回 16。我知道错误 10014 是什么意思,但似乎无法弄清楚为什么它会在绑定时出现在此处,一切似乎都正常。
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
int main()
{
WSADATA WSAData;
SOCKET server, client;
SOCKADDR_IN serverAddr, clientAddr;
int iResult = WSAStartup(MAKEWORD(2, 2), &WSAData);
if (iResult != NO_ERROR) {
std::cout << "startup error" << std::endl;
return 1;
}
server = socket(AF_INET, SOCK_STREAM, 0);
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(5555);
if (bind(server, (SOCKADDR*)&serverAddr, sizeof(serverAddr) != 0))
{
std::cout << "bind " << WSAGetLastError() << " sizeof " << sizeof(serverAddr) << std::endl;
std::cout << "cannot start server" << std::endl;
return 0;
}
listen(server, 0);
std::cout << "Listening for incoming connections..." << std::endl;
char buffer[1024];
int clientAddrSize = sizeof(clientAddr);
if ((client = accept(server, (SOCKADDR*)&clientAddr, &clientAddrSize)) != INVALID_SOCKET)
{
std::cout << "Client connected!" << std::endl;
recv(client, buffer, sizeof(buffer), 0);
std::cout << "Client says: " << buffer << std::endl;
memset(buffer, 0, sizeof(buffer));
closesocket(client);
std::cout << "Client disconnected." << std::endl;
}
return 0;
}
解决方案
括号有错误。这一行:
if (bind(server, (SOCKADDR*)&serverAddr, sizeof(serverAddr) != 0))
应该是:
if (bind(server, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) != 0)
推荐阅读
- tensorflow - 如何将保存的模型加载器与 tf.estimator 一起用于 VGG16
- android - Firebase Cloud Firestore 在插入时冻结应用
- python - 模块“networkx”没有属性“minimum_cycle_basis”
- javascript - 检测用户当前正在查看的部分
- c++ - 在构造函数中用 C++ 中的 unique_ptr 初始化向量
- bash - 在执行期间使用 bash 将进程的输出重定向到自身作为输入
- opengl - 在 OpenGL 的片段着色器中使用 mtl 信息进行纹理映射
- c# - 在 C# 中使用 linq 更改 xml 值
- php - WP_Query 按 menu_order 而非标题排序
- javascript - Flask-SocketIO 未收到消息