我正在使用connect函数(http://linux.die.net/man/2/connect),它有时只能工作。以前,它一直都能正常工作,现在几乎再也无法工作了。自从大约两周前我第一次编写代码以来,代码就没有更改过,因此结果不应更改。我认为这与我的网络有关。我正在使用端口5301(几乎是随机选择的),所以可能存在某种阻塞?我正在使用本地IP 127.0.0.1。

服务器代码:

    int connectionID = 0, listenID = 0;
    struct sockaddr_in sad;
    listenID = socket (AF_INET, SOCK_STREAM, 0);
    memset (&sad, 0, sizeof(sad));
    sad.sin_family = AF_INET;
    sad.sin_addr.s_addr = INADDR_ANY;
    sad.sin_port = htons(5301);
    bind (listenID, (struct sockaddr *)&sad, sizeof(sad));


客户端代码:

    int sockID = 0;
    struct sockaddr_in sad;
    sockID = socket (AF_INET, SOCK_STREAM, 0);
    sad.sin_family = AF_INET;
    sad.sin_port = htons(5301);
    inet_pton (AF_INET, serverIP, &sad.sin_addr.s_addr);
    if (connect (sockID, (struct sockaddr *)&sad, sizeof(sad)) < 0)
    {
         printf ("Error Connecting to Server\n");
         return;
    }


IP作为参数传递

最佳答案

很难准确说明问题出在哪里,但是如果客户端突然报告“连接被拒绝”,则服务器可能不再监听。

服务器应检查bind的返回值是否存在任何错误,以发现服务器是否由于任何原因而无法绑定到端口5301。您在此处发布的服务器代码不会检查可能出现的任何错误。

10-07 19:25
查看更多