c - 如何制作一个具有更多功能的多客户端服务器?

标签 c multithreading tcp pthreads

我是 TCP 服务器客户端程序的新手。我想用 C 语言开发一个应用程序来验证客户端并从服务器接收数据。我知道我需要使用线程来处理多个客户端。但我担心如何通过线程调用服务器端的每个函数,或者是否需要在服务器中创建更多线程(例如工作线程来执行每个函数)。我有一个服务器,它有很多函数,如 fun1() 、fun2()、fun3()、fun4() 来处理客户端数据。那么当我使用线程时有什么问题或延迟吗?因为当一秒内有多个客户端到来时,服务器如何处理这种情况?我开发了一个类似的逻辑

server fun
{
 //thread function calling fun1()
}

void *fun1(void *arg)
{
  fun2()
  pthread_exit((void*)xx)
} 
fun2()
{
  fun3()
}

fun3()
{
}

最佳答案

当您使用 C 时,您必须使用函数accept 来接收传入连接。 accept 是一个阻塞函数,因此它会等待直到建立连接。该函数的返回参数是一个套接字。

因此,accept 之后的下一条语句应该是使用套接字的输入参数创建一个线程。在你的线程中你可以调用你的函数 fun1,fun2,...

当然有一点延迟,但只有几毫秒。当多个客户端要连接时,它们会排队。

并行服务器相对于串行服务器的优点是一个客户端无法阻止您的服务。

关于c - 如何制作一个具有更多功能的多客户端服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049492/

相关文章:

c - 如何在 C 语言中分隔括号之间的术语并列出它们

java - 了解我的 Java 死锁示例

c# - Azure.Data.Tables.TableClient 是线程安全的吗?

c - 了解 c 中的多线程服务器/客户端程序

c - 无法在输出中显示时钟

c - Next Fit 内存分配问题

java - 这个函数是原子函数吗?

c++ - 如何使用 libevent 在两个端点之间进行读写的示例?

c++ - Qt 中的非阻塞线程 tcpi 客户端

c - "return p ? memcpy(p, s, len) : NULL;"是什么意思?