套接字服务器程序不等待客户端处于“接受”阶段,而是在无限循环中运行

用户名

如果我运行下面的套接字服务器程序,则它不会在“接受”阶段等待客户端的连接,而是开始无限循环运行。我的程序被保存为server.c,我尝试使用以下命令在命令行中运行它:

$ ./server /tmp/socket

完整的套接字服务器代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>     



int server (int client_socket)
{
    while (1) {
        int length;
        char* text;             

        if (read (client_socket, &length, sizeof (length)) == 0) 
            return 0;

        text = (char*) malloc (length);

        read (client_socket, text, length);
        printf ("%s\n", text);

        free (text);

        if (!strcmp (text, "quit"))
            return 1;
    }
}


int main (int argc, char* const argv[])
{
    const char* const socket_name = argv[1];                
    int socket_fd; 
    struct sockaddr_un name; 
    int client_sent_quit_message;           
    socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0); 

    name.sun_family = AF_LOCAL; 
    strcpy (name.sun_path, socket_name); 
    bind (socket_fd, (struct sockaddr*)&name, SUN_LEN (&name)); 

    listen (socket_fd, 5); 

    do {
        struct sockaddr_un client_name;

        socklen_t client_name_len;
        int client_socket_fd;

        client_socket_fd = accept (socket_fd, &client_name, &client_name_len);
        client_sent_quit_message = server (client_socket_fd); 

        close (client_socket_fd);
      }
    while (!client_sent_quit_message);

    close (socket_fd);
    unlink (socket_name);
    return 0;
}   
昌德鲁

尝试以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>     
int server (int client_socket)
{
  while (1) {
    int length=30;
    char* text;             
    text = (char*) malloc (length);
    if (read (client_socket, text, length) == 0) 
        return 0;
    printf ("%s\n", text);
    if (!strcmp (text, "quit"))
    {
        free(text);
        return 1;
    }
    free (text);
  }
}
int main (int argc, char* const argv[])
{ 
  const char* const socket_name = argv[1];                
  int socket_fd; 
  struct sockaddr_un name; 
  int client_sent_quit_message;           
  socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0); 
  name.sun_family = AF_LOCAL; 
  strcpy (name.sun_path, socket_name); 
  bind (socket_fd, (struct sockaddr*)&name, SUN_LEN (&name)); 
  listen (socket_fd, 5); 
  do {
    struct sockaddr_un client_name;
    int client_name_len=sizeof(struct sockaddr_un);
    int client_socket_fd;
    client_socket_fd = accept (socket_fd,(struct sockaddr *)&client_name, &client_name_len);
    client_sent_quit_message = server (client_socket_fd); 
    close (client_socket_fd);
}
  while (!client_sent_quit_message);
  close (socket_fd);
  unlink (socket_name);
  return 0;
}

错误在于您没有将强制类型转换为sockaddr_unto的accept函数sockaddr *,然后第三个参数无效,我们无法直接类型转换socklen_tsocklen_t *将值存储为整数并将指针作为参数。

不要使用这种长度类型:
read(client_socket,&length,sizeof(length));

它从套接字读取输入,并尝试在&length中进行赋值,然后尝试将值存储在character变量中,这时会根据长度给出某些错误,或者读取length。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

等待客户端读取消息的套接字服务器

来自分类Dev

异步客户端套接字c#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

来自分类Dev

Python套接字等待客户端连接

来自分类Dev

使用Python使客户端套接字等待服务器套接字

来自分类Dev

如何使客户端套接字等待服务器套接字

来自分类Dev

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

来自分类Dev

多线程服务器退出,而无需等待客户端的连接

来自分类Dev

在python套接字服务器中接受多个客户端

来自分类Dev

在python套接字服务器中接受多个客户端

来自分类Dev

我如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

如何使客户端等待服务器套接字连接?

来自分类Dev

如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

如何使客户端等待服务器套接字连接?

来自分类Dev

服务器套接字接受客户端套接字时,到底发生了什么事情?

来自分类Dev

服务器套接字不能接受客户端。(C# UWP 异步套接字编程)

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Python套接字服务器/客户端未循环

来自分类Dev

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

来自分类Dev

套接字服务器正在运行,但客户端无法连接

来自分类Dev

我不想在单服务器程序的多客户端中关闭套接字

来自分类Dev

一个简单的客户端服务器套接字程序的PrintWriter和OutputStream

来自分类Dev

空闲时间后,套接字挂起:服务器-客户端Java程序

Related 相关文章

  1. 1

    等待客户端读取消息的套接字服务器

  2. 2

    异步客户端套接字c#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

  3. 3

    Python套接字等待客户端连接

  4. 4

    使用Python使客户端套接字等待服务器套接字

  5. 5

    如何使客户端套接字等待服务器套接字

  6. 6

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

  7. 7

    多线程服务器退出,而无需等待客户端的连接

  8. 8

    在python套接字服务器中接受多个客户端

  9. 9

    在python套接字服务器中接受多个客户端

  10. 10

    我如何让我的asyncio客户端调用套接字服务器并等待响应

  11. 11

    如何使客户端等待服务器套接字连接?

  12. 12

    如何让我的asyncio客户端调用套接字服务器并等待响应

  13. 13

    如何使客户端等待服务器套接字连接?

  14. 14

    服务器套接字接受客户端套接字时,到底发生了什么事情?

  15. 15

    服务器套接字不能接受客户端。(C# UWP 异步套接字编程)

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    Python套接字服务器/客户端未循环

  25. 25

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

  26. 26

    套接字服务器正在运行,但客户端无法连接

  27. 27

    我不想在单服务器程序的多客户端中关闭套接字

  28. 28

    一个简单的客户端服务器套接字程序的PrintWriter和OutputStream

  29. 29

    空闲时间后,套接字挂起:服务器-客户端Java程序

热门标签

归档