【发布时间】:2012-05-17 10:03:47
【问题描述】:
我在 windows (c#) 上有一个 tcp 服务器应用程序,它接受端口 3000 的任何连接 我在 linux(ubuntu)(c++) 上有一个 tcp 客户端应用程序,它通过端口 3000 发送一个简单的文本
我在 Windows 上也有一个客户端,在 linux 上有一个服务器,我可以完美地发送文本: 从 linux 到 linux 从窗户到窗户 从windows到linux
问题是当我尝试从 linux 客户端发送到 windows 服务器时,我在 linux 上的 c++ 应用程序告诉我主机不存在
我已经检查了 IP 地址,这是正确的,我也尝试使用主机名进行检查
但它不起作用
有人知道为什么会这样吗???
这是我在客户端上的代码(linux-c++):
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
struct in_addr addr={0};
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
addr.s_addr=inet_addr(argv[1]);
//server=gethostbyname(argv[1]);
server = gethostbyaddr((char *) &addr, 4, AF_INET);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
我打电话ping,一切正常
我在 Windows 上运行我的服务器并打开端口 3000 到任何连接
我尝试使用 windowsIP/windowsHostName 和端口 3000 运行我的客户端(上面的代码)(已经尝试了另一个端口)
问题出在一行:
server = gethostbyaddr((char *) &addr, 4, AF_INET);
服务器为空,因此它打印“错误,没有这样的主机”
但是ip是正确的。
当我使用相同的代码与 linux(c++) 上的服务器连接时,它可以工作
【问题讨论】:
-
当您使用 Windows 主机名从 linux 机器调用 nslookup 或 ping 时会发生什么?
-
1 .在 Windows2Windows 的情况下,当前是 Windows 服务器还是客户端? 2.(linux)客户端是否连接到服务器? 3. 请粘贴错误打印。
-
我已经用windows的IP地址在linux上调用了ping,反之亦然,效果很好
-
是的,linux 客户端已经连接到服务器,但它也在 linux 中。而且我windwso上的客户端也和linux下的服务器连接了,唯一的问题是我用windows上的服务器,linux上的客户端
-
您是否尝试过从 linux 机器 telnet 到 Windows 服务器?结果如何? Windows 服务器上的 IP 地址是什么? Linux机器使用的网关会不会不知道如何路由到Windows机器?