0

我在 windows (c#) 上有一个 tcp 服务器应用程序,它接受端口 3000 的任何连接 我在 linux(ubuntu)(c++) 上有一个 tcp 客户端应用程序,它通过端口 3000 发送一个简单的文本

我在 windows 上也有一个客户端,在 linux 上有一个服务器,我可以完美地发送文本:从 linux 到 linux 从 windows 到 windows 从 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++) 上的服务器连接时,它可以工作

4

2 回答 2

0

最可能的原因是您的 Windows 防火墙阻止了到端口 3000 的传入连接。

转到控制面板并禁用防火墙并再次测试。如果这是问题,您必须添加一条规则以允许传入连接到您的 3000 端口。您还应该在规则中包含允许的主机 IP(您的 Linux IP)以避免意外远程连接出现问题。

您可以尝试从 linux 建立一个 telnet 连接到您的服务器 IP 地址和 3000 端口。它可能会被防火墙拒绝。

于 2012-05-08T23:28:17.143 回答
0

您需要将虚拟框中的网络类型设置为“NAT”。如果它在桥接适配器中,则会出现上述问题。可以在这里找到详细的讨论:http: //ubuntuforums.org/archive/index.php/t-1786307.html

于 2015-08-14T17:37:59.183 回答