bind()和listen()函数(WinSock)出错
Error with bind() and listen() functions (WinSock)
我正在使用WinSock
,我有一个问题:如果我将MY_IP
定义为"127.0.0.1",这是可行的,但我不希望这样。我想将MY_IP
定义为"109.95.202.122",但它不起作用。
我失败了:Fail bind()
和Listen Error
#pragma comment(lib, "Ws2_32.lib")
#include <sdkddkver.h>
#include <conio.h>
#include <stdio.h>
#include <WinSock2.h>
#include <Windows.h>
#include <iostream>
#include <string>
#include <process.h>
#define MY_IP "109.95.202.122"
using namespace std;
int main()
{
WSADATA wsaData;
int result = WSAStartup( MAKEWORD( 2, 2 ), & wsaData );
if( result != NO_ERROR )
cout << "Initialization error." << endl;
SOCKET mainSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( mainSocket == INVALID_SOCKET )
{
printf( "Error creating socket: %ldn", WSAGetLastError() );
WSACleanup();
return 1;
}
sockaddr_in service;
memset( & service, 0, sizeof( service ) );
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr(MY_IP);
service.sin_port = htons( 27015 );
if(bind(mainSocket, (SOCKADDR*)&service, sizeof(service))== SOCKET_ERROR)
{
cout << "Fail bind()" << endl;
closesocket( mainSocket );
}
if(listen(mainSocket, 1) == SOCKET_ERROR)
{
cout << "Listen Error";
}
cout << "Oczekiwanie na polaczenie" << endl;
SOCKET acceptSocket = SOCKET_ERROR;
while( acceptSocket == SOCKET_ERROR )
{
acceptSocket = accept( mainSocket, NULL, NULL);
}
if( acceptSocket != SOCKET_ERROR)
{
cout << "Connected ! :D" << endl;
for(;;)
{
char chWiadomosc[1000];
recv(mainSocket, chWiadomosc, sizeof(chWiadomosc), NULL);
}
}
}
如果bind()
或listen()
出现故障,请调用WSAGetLastError()
查找故障原因。
如果服务器将自己绑定到127.0.0.1,则客户端将只能连接到127.0.0.1。如果客户端需要连接到109.95.202.122,则服务器需要绑定到将接受客户端的本地IP,或者指定INADDR_ANY
绑定到所有可用的本地IP。如果109.95.202.122是服务器的本地IP,则一切正常。但是,如果109.95.202.122实际上是服务器后面运行的路由器/NAT的公共IP,则服务器需要绑定到路由器/NAT配置为端口转发入界请求的本地IP。bind()
只能绑定到属于bind()
运行的机器的本地IP上。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- bind()和listen()函数(WinSock)出错