C posix套接字,无法从客户端向服务器发送数据

弗拉基米尔(Vladimir)

我想建立一个客户端并将其连接到服务器。我知道客户端进程在服务器之前开始运行,因此我会无限循环地进行连接,直到被接受为止。然后,我想向客户端输入消息并将其发送到服务器,服务器将在屏幕上打印它们。我从代码中删除了所有错误检测以使其更短,我知道它们必须存在。我正在尝试这样做,但是服务器什么也没收到,客户端无法进行第二次连接。

服务器

int main(int argc, char *argv[])
{
    int sockfd, newsockfd;
    socklen_t clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(5000);
    bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
    listen(sockfd, 5);
    clilen = sizeof(cli_addr);
    while (newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,&clilen) >= 0)
    {
        read(newsockfd, buffer, 255);
        close(newsockfd);
    }
    close(sockfd);
    return 0;
}

客户

int main(int argc, char *argv[])
    {
    int sockfd;
    struct sockaddr_in serv_addr;

    char buffer[256];
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(5000);
    while (1) {
        while ((connect(sockfd,(struct sockaddr *)  &serv_addr,sizeof(serv_addr)) < 0)) {
           printf("trying to connect\n");
           sleep(1);
        }
        printf("connected\nplease, enter a message\n");
        scanf("%s", buffer);
        write(sockfd, buffer, strlen(buffer));
    }
    close(sockfd);
    return 0;
}
斯瓦罗格

我不知道您是如何编译代码的,但是如果您设置了警告标志(-Wall在gcc中),则会收到此警告

server.c: In function ‘main’:
server.c:33:44: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 if (newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,&clilen) >= 0) {

通过它,我改变了这个..

if (newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,&clilen) >= 0) {

要..(请注意多余的括号)

if ((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,&clilen)) >= 0) {

我没有其他警告,服务器捕获了客户端的消息。

这是我调试该服务器时运行的服务器(这基本上是您的代码,稍有改动)

int sockfd, newsockfd;
socklen_t clilen;
char buffer[256];
int nbytes = 0;
struct sockaddr_in serv_addr, cli_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
//serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(5007);
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));


if (listen(sockfd, 5) <0) { }

clilen = sizeof(cli_addr);
if ((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,&clilen)) >= 0) { 

    while ((nbytes = read(newsockfd, buffer, sizeof(buffer)))<0) {
        sleep(1);
    }

    printf("client sent: %s", buffer);
}
close(newsockfd);
close(sockfd);
return 0;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

服务器无法通过C中的套接字向客户端发送消息

来自分类Dev

无法从Java套接字服务器接收数据到C套接字客户端

来自分类Dev

UNIX域套接字C ++服务器无法将数据返回给客户端

来自分类Dev

C客户端/服务器套接字错误

来自分类Dev

使用C中的套接字将文件从客户端发送到服务器

来自分类Dev

使用套接字C#客户端/服务器发送文件

来自分类Dev

TCP套接字,发送文件,客户端服务器,服务器不保存整个文件,C语言

来自分类Dev

C ++服务器无法通过套接字从python客户端读取我的消息

来自分类Dev

在服务器套接字C#中获取有关客户端的数据

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

PHP客户端套接字与C#套接字服务器的连接

来自分类Dev

Java(客户端)和C#(服务器)TCP套接字。和服务器从客户端读取无限的最后数据

来自分类Dev

C ++套接字客户端/服务器服务器不响应客户端

来自分类Dev

C套接字客户端/服务器pthreads服务器广播

来自分类Dev

C套接字客户端/服务器pthreads服务器广播

来自分类Dev

C#Xamarin UWP / Android服务器-客户端套接字TCP无法正确连接

来自分类Dev

客户端-服务器套接字C代码:“读取”后,服务器不执行代码,直到发送另一行

来自分类Dev

C#UDP套接字客户端和服务器

来自分类Dev

如何在Python客户端和C ++服务器上使用套接字

来自分类Dev

套接字将C#客户端发布到Java服务器

来自分类Dev

套接字编程:C语言中的UDP客户端-服务器

来自分类Dev

使用C中的UDP套接字将结构从客户端传递到服务器

来自分类Dev

套接字编程c#/客户端-服务器通信

来自分类Dev

C ++套接字客户端到python服务器未创建连接

来自分类Dev

在C中运行客户端和服务器套接字连接-带线程

来自分类Dev

在C ++中使用TCP套接字进行远程客户端和服务器通信

来自分类Dev

C#UDP套接字客户端和服务器

来自分类Dev

C#TCP套接字服务器客户端连接

Related 相关文章

  1. 1

    服务器无法通过C中的套接字向客户端发送消息

  2. 2

    无法从Java套接字服务器接收数据到C套接字客户端

  3. 3

    UNIX域套接字C ++服务器无法将数据返回给客户端

  4. 4

    C客户端/服务器套接字错误

  5. 5

    使用C中的套接字将文件从客户端发送到服务器

  6. 6

    使用套接字C#客户端/服务器发送文件

  7. 7

    TCP套接字,发送文件,客户端服务器,服务器不保存整个文件,C语言

  8. 8

    C ++服务器无法通过套接字从python客户端读取我的消息

  9. 9

    在服务器套接字C#中获取有关客户端的数据

  10. 10

    将输入从C套接字客户端读取到Java套接字服务器

  11. 11

    将输入从C套接字客户端读取到Java套接字服务器

  12. 12

    PHP客户端套接字与C#套接字服务器的连接

  13. 13

    Java(客户端)和C#(服务器)TCP套接字。和服务器从客户端读取无限的最后数据

  14. 14

    C ++套接字客户端/服务器服务器不响应客户端

  15. 15

    C套接字客户端/服务器pthreads服务器广播

  16. 16

    C套接字客户端/服务器pthreads服务器广播

  17. 17

    C#Xamarin UWP / Android服务器-客户端套接字TCP无法正确连接

  18. 18

    客户端-服务器套接字C代码:“读取”后,服务器不执行代码,直到发送另一行

  19. 19

    C#UDP套接字客户端和服务器

  20. 20

    如何在Python客户端和C ++服务器上使用套接字

  21. 21

    套接字将C#客户端发布到Java服务器

  22. 22

    套接字编程:C语言中的UDP客户端-服务器

  23. 23

    使用C中的UDP套接字将结构从客户端传递到服务器

  24. 24

    套接字编程c#/客户端-服务器通信

  25. 25

    C ++套接字客户端到python服务器未创建连接

  26. 26

    在C中运行客户端和服务器套接字连接-带线程

  27. 27

    在C ++中使用TCP套接字进行远程客户端和服务器通信

  28. 28

    C#UDP套接字客户端和服务器

  29. 29

    C#TCP套接字服务器客户端连接

热门标签

归档