【发布时间】:2018-10-19 09:12:33
【问题描述】:
我在使用 c Socket 时遇到了这个问题:localhost 中的连接可以正常工作,但是如果我有一个使用不同机器代码的客户端,则无法正常工作。
服务器:
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()返回
【问题讨论】:
-
当您遇到错误时,请检查
errno以了解问题所在。您可以使用例如strerror获取可打印的错误字符串。 -
至于可能的原因,服务器真的
listen在socket上吗?是accept新连接吗? -
你能发一些minimal reproducible example,至少,什么是端口,服务器如何监听客户端...
-
您的防火墙有问题,无法让客户端的通信通过?
-
也许我不明白,但是服务器获得了
inet_addr("127.0.0.1")的IP 地址并且客户端尝试连接到inet_addr("172.26.188.19")?
标签: c sockets serversocket