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

推特

我正在编写一些代码来创建客户端-服务器连接。客户端将字符串发送到服务器,并且服务器应根据发送的内容来解析和打印字符串。

客户代码:

// Client side C/C++ program to demonstrate Socket programming
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080

int main(int argc, char const *argv[]) {
    struct sockaddr_in address;
    int sock = 0, valread;
    struct sockaddr_in serv_addr;
    size_t len = 0;
    char *buffer = NULL;
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("\n Socket creation error \n");
        return -1;
    }

    memset(&serv_addr, '0', sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);

    // Convert IPv4 and IPv6 addresses from text to binary form
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }

    if (connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        printf("\nConnection Failed \n");
        return -1;
    }

    while(1) {
        getline(&buffer, &len, stdin);
        printf("Line sent: %s", buffer);
        send(sock, buffer, strlen(buffer), 0);
    }
}

服务器代码:

/*Required Headers*/

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include<string.h>

int main()
{

    char str[100];
    int listen_fd, comm_fd;

    struct sockaddr_in servaddr;

    listen_fd = socket(AF_INET, SOCK_STREAM, 0);

    bzero( &servaddr, sizeof(servaddr));

    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htons(INADDR_ANY);
    servaddr.sin_port = htons(8080);

    bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));

    listen(listen_fd, 10);

    comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);

    while(1)
    {
        bzero( str, 100);

        read(comm_fd,str,100);

        printf("Received: %s",str);
        if(strncmp(str, "NEW", 3) == 0)
        {
            printf("Client - NEW");
        }
        else if(strncmp(str, "FILE", 4) == 0)
        {
            printf("Client - FILE");
        }
        else if(strncmp(str, "NAME", 4) == 0)
        {
            strtok(str, ": ");
            printf("NAME: %s", str);
        }
        else if(strncmp(str, "DESCRIPTION", 11) == 0)
        {
            strtok(str, ": ");
            printf("DESCRIP: %s", str);
        }
        else if(strncmp(str, "PRINTER", 7) == 0)
        {
            strtok(str, ": ");
            printf("PRINTER: %s", str);
        }

    }
}

我期望发生的是,当我从客户端向服务器发送“ NEW”时,服务器打印“ Client-NEW”。然后,当我发送“ FILE”时,服务器将打印“ CLIENT-FILE”。发生了一次发送延迟的情况。因此,当我发送NEW消息时,服务器将打印“ Received:NEW”,但不会进入if检查以打印“ CLIENT-NEW”。然后,当我发送“ FILE”时,服务器将打印“ Client-NEWRecieved:FILE”。

我在这里可能做错了什么?

Ctx

因此,当我发送NEW消息时,服务器将显示“ Received:NEW”

是的,在这里:

printf("Received: %s",str);

但具体来说,您发送“ NEW \ n”,服务器将显示“ Received:NEW \ n”。此换行符很重要,因为它会触发行缓冲端子上的输出

但不会进入if检查以打印“客户-新”。

是的,它执行条件:

printf("Client - NEW");

但是输出会一直缓冲到下一个换行符被打印出来为止。

然后,当我发送“ FILE”时,服务器将打印“ Client-NEWRecieved:FILE”。

现在,在发送“ FILE”之后,将执行以下命令:

printf("Received: %s",str);

str“ FILE \ n”作为内容。这将刷新输出缓冲区,该缓冲区当前包含“客户端-NEWRecieved:FILE \ n”。此外

printf("Client - FILE");

被执行(但不输出,仅被缓冲)并且过程迭代。

因此,解决方法是在每个printf格式字符串的末尾添加换行符“ \ n”(或在简单情况下使用puts)。

printf("Received: %s\n",str); // Although "str" will usually contain a newline, but better play it safe

puts("Client - NEW");

此外,如果您具有基于行的协议,则应切换到套接字的缓冲输入:

comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);
FILE *sock = fdopen(comm_fd, "r+");

然后逐行读取输入

while (1) {
    fgets(str, sizeof(str), sock);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Python套接字服务器/客户端编程

来自分类Dev

服务器/客户端套接字连接

来自分类Dev

套接字编程-简单的客户端/服务器

来自分类Dev

客户端js上的套接字服务器?

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

使用套接字在客户端阻止的客户端-服务器通信

来自分类Dev

客户端/服务器/客户端通过套接字通信

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

客户端断开连接后,C 套接字 TCP 服务器出现故障

来自分类Dev

Java套接字服务器-客户端;卡在服务器端

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Java客户端/服务器套接字程序-服务器不响应客户端请求

来自分类Dev

多线程服务器客户端代码

来自分类Dev

Java客户端服务器套接字,重用客户端套接字将引发“ java.io.StreamCorruptedException:无效类型代码:AC”

来自分类Dev

客户端-服务器插座

来自分类Dev

测试客户端服务器

来自分类Dev

客户端/服务器编程

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    Python套接字服务器/客户端编程

  6. 6

    服务器/客户端套接字连接

  7. 7

    套接字编程-简单的客户端/服务器

  8. 8

    客户端js上的套接字服务器?

  9. 9

    Java客户端/服务器套接字问题

  10. 10

    Java TCP 客户端/服务器套接字

  11. 11

    使用套接字在客户端阻止的客户端-服务器通信

  12. 12

    客户端/服务器/客户端通过套接字通信

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    客户端断开连接后,C 套接字 TCP 服务器出现故障

  21. 21

    Java套接字服务器-客户端;卡在服务器端

  22. 22

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

  23. 23

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

  24. 24

    Java客户端/服务器套接字程序-服务器不响应客户端请求

  25. 25

    多线程服务器客户端代码

  26. 26

    Java客户端服务器套接字,重用客户端套接字将引发“ java.io.StreamCorruptedException:无效类型代码:AC”

  27. 27

    客户端-服务器插座

  28. 28

    测试客户端服务器

  29. 29

    客户端/服务器编程

热门标签

归档