【问题标题】:Connection from linux to windows via tcp通过 tcp 从 linux 连接到 windows
【发布时间】: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机器?

标签: c# c++ tcp tcpclient


【解决方案1】:

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

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

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

【讨论】:

  • 如果防火墙阻止传入连接,Windows 到 Windows 将无法工作。
  • @BradBruce 不要这么快下结论:可能 Windows 到 Windows 已经在同一台机器上使用客户端和服务器进行了测试。
  • 其实他是对的,防火墙一直被禁用:/
  • telnet 怎么样?你能从 Linux 连接到 Windows 机器上的 Web 服务器吗(如果你安装了 IIS)?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 2021-07-23
    • 2012-04-26
    • 1970-01-01
    • 2018-02-05
    • 2018-01-11
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多