C++ Winsock 服务器-客户端远程连接
c++ winsock server-client remote connection
我正在尝试创建一个简单的应用程序,可以在两台远程计算机之间交换消息。使用"127.0.0.1"ip它可以正常工作,等待客户端确认并连接到客户端,但是如果我尝试本地"192.168.0.15"或具有相同端口的全局IP,服务器会立即连接到sth,而无需等待客户端。
这是我的服务器代码的一部分:
char ip[20] = "127.0.0.1"; int port = 19385;
SOCKET sockListen, sockConnect;
SOCKADDR_IN address;
sockConnect = socket (AF_INET, SOCK_STREAM, NULL);
address.sin_addr.s_addr = inet_addr (ip);
address.sin_family = AF_INET;
address.sin_port = htons (port);
sockListen = socket (AF_INET, SOCK_STREAM, NULL);
bind (sockListen, (SOCKADDR*)&address, AddressSize);
listen (sockListen, SOMAXCONN);
sockConnect = accept (sockListen, (SOCKADDR*)&address, &AddressSize);
。
请建议如何解决问题。
在调用 accept()
之前,您不应该使用 socket()
初始化 sockConnect
变量。 accept()
返回已连接到客户端的新分配套接字句柄。 您正在泄漏socket()
分配的套接字句柄。
只能bind()
属于运行应用的本地计算机的 NIC 的 IP。您无法bind()
到外部 IP。
您显示的代码根本没有执行任何错误处理。 您需要添加它,例如:
int errCode;
SOCKET sockListen = socket (AF_INET, SOCK_STREAM, NULL);
if (sockListen == INVALID_SOCKET)
{
errCode = WSAGetLastError();
// ...
}
else
{
SOCKADDR_IN address = {0};
address.sin_addr.s_addr = inet_addr (ip);
address.sin_family = AF_INET;
address.sin_port = htons (port);
if (bind (sockListen, (SOCKADDR*)&address, sizeof(address)) == SOCKET_ERROR)
{
errCode = WSAGetLastError();
// ...
}
else
{
if (listen (sockListen, SOMAXCONN) == SOCKET_ERROR)
{
errCode = WSAGetLastError();
// ...
}
else
{
int addressSize;
SOCKET sockClient = accept (sockListen, (SOCKADDR*)&address, &addressSize);
if (sockClient == INVALID_SOCKET)
{
errCode = WSAGetLastError();
// ...
}
else
{
// ...
closesocket(sockClient);
}
}
}
closesocket(sockListen);
}
相关文章:
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 客户端 gRPC 连接,C++重新连接?
- 如何在 c++ 中确定 tcp 客户端是否连接
- 为什么我的客户端无法连接到服务器?
- C 套接字服务器不接受任何客户端 /客户端无法连接
- C++套接字客户端断开连接
- C++ - 程序在尝试在 TCP 客户端上连接到不存在的地址时表现出奇怪的行为
- send()在客户端关闭连接时未报告ENOTCONN(AS400)
- 客户端TLS连接的OpenSSL或LibreSSL C++示例
- C++ Winsock 服务器-客户端远程连接
- 服务器关闭并重新启动后,客户端无法连接
- Winsock-正在将客户端重新连接到服务器-10061
- 加速和 Windows 套接字 - 正确处理 TCP 客户端断开连接方案
- 使 Web 服务器与客户端断开连接
- HTTP 代理检测 HTTP 客户端断开连接
- Unix 服务器 - Windows 客户端,连接失败
- 调用的对象已与其客户端断开连接
- 提高客户端-服务器连接的稳定性
- hiredis客户端,连接断开时发生redisAsyncFree错误
- Flash客户端c++服务器连接被对等方重置