我在使用 c Socket 时遇到了这个问题:本地主机中的连接可以工作,但如果我有一个不同机器代码中的客户端则无法工作。
服务器:
int my_socket;
my_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(my_socket <0) {
errorhandler("socket creation failed.\n");
clearwinsock();
return -1;
}
struct sockaddr_in sad;
memset(&sad, 0, sizeof(sad));
sad.sin_family = AF_INET;
sad.sin_addr.s_addr = inet_addr("127.0.0.1");
sad.sin_port = htons( port ); //(port=8080)
客户:
int c_socket;
c_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(c_socket<0) {
errorhandler("socket creation failed.\n");
closesocket(c_socket);
clearwinsock();
return -1;
}
struct sockaddr_in sad;
memset(&sad, 0, sizeof(sad));
sad.sin_family = AF_INET;
sad.sin_addr.s_addr = inet_addr("172.26.188.19");
sad.sin_port = htons(PROTOPORT);
if (connect(c_socket, (struct sockaddr *)&sad, sizeof(sad))< 0) {
errorhandler( "Failed to connect.\n" );
closesocket(c_socket);
clearwinsock();
return -1;
}
问题是客户端的connect()返回<0。
最佳答案
[假设您的服务器代码完整(而不仅仅是您向我们展示的部分)]
服务器仅绑定(bind)到环回接口(interface)。从服务器外部无法访问此内容。
要让服务器监听其任何接口(interface),请通过替换
将其绑定(bind)到INADDR_ANY
sad.sin_addr.s_addr = inet_addr("127.0.0.1");
与
sad.sin_addr.s_addr = INADDR_ANY;
关于使用 c socket 连接到远程机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889272/