通过 tcp 从 Linux 连接到 Windows

本文关键字:Windows 连接 Linux tcp 通过 | 更新日期: 2023-09-27 18:33:29

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

通过 tcp 从 Linux 连接到 Windows

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

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

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

您需要

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