我在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,因此它打印“ERROR,没有这样的主机”
我尝试过各种组合:
-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)
答案 0 :(得分:0)
您必须拥有某种名称服务,例如DNS,以便gethostbyaddr()确定给定地址的主机名。当你将Windows转向Linux时,显然存在这个问题。一般来说,我自己有很多可靠性问题,以这种方式解析主机名,并建议你不要使用它。正如DTB所指出的那样,您只需要IP地址即可连接。如果由于某些其他原因需要主机名,那么最安全的做法是让您的服务器在客户端首次连接时向客户端发送其主机名(反之亦然)