【问题标题】:Client Server problem with connect() or accept()连接()或接受()的客户端服务器问题
【发布时间】:2011-02-08 06:57:22
【问题描述】:

全部。我对客户端服务器程序有一些奇怪的问题。我有两种不同类型的客户端试图连接到一台服务器,一种只是比另一种更准系统,要做的事情更少。但在其他方面,它们实际上是相同的。虽然准系统代码可以连接到服务器并且服务器可以很好地接受它,但它的复杂版本不能。客户端说它已连接,发送消息(通过 send() 和 sendto())并获取发回的字节数。但是服务器无法识别它。我不太确定为什么,尤其是在比较两个客户端版本时,它们实际上是同一件事(至少在调用 connect() 之前),精细版本具有 bind() 而准系统版本没有。任何人都可以看到为什么这些非常相似的代码不相似的问题:P

    if (argc == 3)
{
    host = argv[1];         // server address
    info.c_name = argv[2];
}
else
{
    printf("plz read the manual, kthxbai\n");
    exit(1);
}

hp = gethostbyname(host);
if (!hp)
    exit(1);
printf("host found\n");

// setting up address and port structure information
bzero((char * ) &server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(SERVER_PORT);


// opening up socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
    exit(1);
else
    printf("socket is opened: %i \n", sockfd);
info.sock_fd = sockfd;


// binding socket to a port: not in barebone version
rv = bind(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
if (rv < 0)
{
    printf("MAIN: ERROR bind() %s\n", strerror(errno));
    exit(1);
}
else
    printf("socket is bound\n");

// connecting
rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
printf("rv = %i\n", rv);
if (rv < 0)
{
    printf("MAIN: ERROR connect() %i:  %s\n", errno, strerror(errno));
    exit(1);
}
else
    printf("connected\n");

我什至不确定问题出在哪里,是客户端的复杂版本还是只是服务器?感谢您的任何启发。

【问题讨论】:

    标签: c unix tcp connection client-server


    【解决方案1】:

    如果代码确实是您正在使用的代码,那么由于 TCP 对Simultaneous connect 的支持有些晦涩,您的客户端正在(神奇地!)连接到自身。

    这里的问题是您根本没有使用gethostbyname 的返回值。 如果它可能在本地计算机上运行,​​您也不应该绑定服务器端口。

    【讨论】:

    • 好吧,客户端由于某种原因在 connect() 周围挂起,但感谢您告诉我有关 bind() 的信息,我在想什么? (显然不是)
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 2021-03-09
    • 2016-12-21
    • 2012-07-04
    • 2012-08-31
    • 1970-01-01
    • 2020-02-05
    • 2018-10-05
    相关资源
    最近更新 更多