通过tcp从linux连接到Windows

时间:2012-05-08 21:29:04

标签: c# c++ tcp tcpclient

我在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 ++)上的服务器进行连接时,它可以正常工作

1 个答案:

答案 0 :(得分:0)

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

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

您可以尝试通过linux将telnet连接到服务器IP地址和3000端口。它可能会被防火墙拒绝。