我在Windows(c#)上有一个tcp服务器应用程序,它接受端口3000的任何连接 我在Linux上有一个tcp客户端应用程序(ubuntu)(c ++),它通过端口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);
服务器获取null,因此它打印“ERROR,没有这样的主机”
但是ip是正确的。
当我使用相同的代码与linux(c ++)上的服务器进行连接时,它可以正常工作
答案 0 :(得分:0)
最可能的原因是您的Windows防火墙阻止了到端口3000的传入连接。
转到“控制面板”并禁用防火墙并再次测试。如果这是问题,则必须添加规则以允许到3000端口的传入连接。您还应该在规则中包含允许的主机IP(您的Linux IP),以避免意外远程连接出现问题。
您可以尝试通过linux将telnet连接到服务器IP地址和3000端口。它可能会被防火墙拒绝。