C# 将TCP客户端(在linux/c上)连接到TCP服务器(在windows c上)

C# 将TCP客户端(在linux/c上)连接到TCP服务器(在windows c上),c#,c++,tcp,tcpclient,tcpserver,C#,C++,Tcp,Tcpclient,Tcpserver,可能重复: 我在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; st

可能重复:

我在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);
它返回null,因此打印“错误,没有这样的主机”

我尝试了各种组合:

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

-TCP客户端(linux)到TCP服务器(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)

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

如果您想进行TCP连接并且您拥有IP地址,为什么需要执行反向DNS查找?什么???,我不明白…什么是反向DNS查找???你调用
gethostbyaddr
。为什么?我对TCP知之甚少,所以我从网上得到了这些代码。据我所知,“gethostbyaddr”以正确的字节顺序返回ip,我需要它来分配服务器:server=gethostbyaddr((char*)&addr,6,AF_INET);我不知道为什么它可以在linux/linux连接上工作,而不能在linux/Windows连接上工作。请花点精力试着理解你在做什么。不要从互联网上复制随机代码,希望我们能为您提供服务。
server = gethostbyaddr((char *) &addr, 6, AF_INET);