使用 c socket 连接到远程机器

标签 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。

最佳答案

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

服务器仅绑定(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/

相关文章:

java - 服务器Socket连接Java

java - JAVA中一个端口的阻塞套接字连接

c++ - 套接字动态绑定(bind)到缩小范围

c - 用C实现闭包

c - 如何在网络内核扩展中使用OpenSSL?

c - hiredis 报错 1 REDIS_ERR_IO 没有那个文件或目录

c - 获取谷歌请求

c - '目标无法到达' ('Port unreachable' ) 将数据发送到 127.0.0.1 (localhost) 上的 UDP 套接字时

c++ - snprintf 的逆函数

java - Android Studio TCPClient无法发送数据