【问题标题】:Conecting TCP client (on linux/c++) to TCP server (on windows c#) [duplicate]将 TCP 客户端(在 linux/c++ 上)连接到 TCP 服务器(在 windows c# 上)[重复]
【发布时间】:2012-05-11 02:45:42
【问题描述】:

可能重复:
Connection from linux to windows via tcp

我在 windows/c# 上有一个 TCP 客户端,在 linux/c++ 上有另一个 另外我在两者上都有一个 TCP 服务器。

我在 windows/c# 上的 TCP 客户端工作正常,问题是在 linux/c++ 上的 TCP 客户端

当我连接到 linux/c++ 上的 TCP 服务器时,它运行良好,但是当我尝试连接到 windows/c# 上的 TCP 服务器时,它无法连接,但 ping 正常。

这是失败的代码部分:

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 = gethostbyaddr((char *) &addr, 6, AF_INET);
if (server == NULL) {
    fprintf(stderr,"ERROR, no such host\n");
    exit(0);

问题出在这条线上:

server = gethostbyaddr((char *) &addr, 6, AF_INET);

它返回null,所以它打印“错误,没有这样的主机”

每种组合我都试过了:

-TCP client(linux) to TCP Server(linux)

-TCP client(linux) to TCP Server(windows)

-TCP 客户端(windows) 到 TCP 服务器(linux)

-TCP 客户端(windows) 到 TCP 服务器(windows)

一切正常,除了:TCP 客户端(linux)到 TCP 服务器(windows)

我还尝试了 TCP 客户端 netcat(包含在 linux 上)到 TCP 服务器(windows) 并且有效。

我已经从 windows 到 linux 以及从 linux 到 windows 都调用了 ping,它收到 100%

我不知道为什么我的 TCP 客户端(linux)没有连接到 TCP 服务器(linux)

【问题讨论】:

  • 如果你想建立一个 TCP 连接并且你有 IP 地址,为什么需要执行反向 DNS 查找?
  • 什么???,我不明白...什么是反向 DNS 查找???
  • 你打电话给gethostbyaddr。为什么?
  • 我对 TCP 了解不多,所以我从网上得到了那个代码。我的理解是“gethostbyaddr”以正确的字节顺序返回ip,我需要它来分配服务器:server = gethostbyaddr((char *) &addr, 6, AF_INET);而我不知道的是为什么它适用于连接 linux/linux,但不适用于 linux/windows
  • 请花一些精力尝试了解您在做什么。不要从 Internet 上复制随机代码并期望我们为您服务。

标签: c# c++ tcp tcpclient tcpserver


【解决方案1】:

您必须拥有某种名称服务,例如 DNS,才能让 gethostbyaddr() 确定给定地址的主机名。当您将 Windows 转到 linux 时,这显然存在问题。一般来说,我自己在以这种方式解析主机名时遇到了很多可靠性问题,建议您不要使用它。正如 DTB 指出的那样,您只需要 IP 地址即可连接。如果您出于其他原因需要主机名,那么最安全的做法是让您的服务器在您的客户端首次连接时向您的客户端发送其主机名(反之亦然)

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 2023-01-14
    • 2015-08-21
    • 2015-08-23
    • 2012-07-04
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多