使用C插座连接到远程机器

时间:2018-10-19 09:12:34

标签: c sockets serversocket

我在使用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。

1 个答案:

答案 0 :(得分:1)

[假设您的服务器代码完整(而不仅仅是显示给我们的部分)]

服务器仅绑定到环回接口。无法从服务器 外部访问。

要让服务器监听其任何接口,请通过替换

将其绑定到INADDR_ANY
  sad.sin_addr.s_addr = inet_addr("127.0.0.1");

  sad.sin_addr.s_addr = INADDR_ANY;