TCP套接字到多个IP/端口
我正在尝试编写一个连接到多个IP/端口的应用程序,我遇到的问题是,我不知道IP的数量,因此一个部门可以使用它连接到2个IP,而另一个部门可以连接到8个,因此它必须在运行时进行配置,我正在考虑使用线程或fork-inside-loop,但不确定哪一个更适合这项工作,希望有人能在这里指导我,我在Linux下使用C 比如说 可以这样运行它。输出ip1端口1 ip2端口2 ip3端口3 另一个可以像这样运行a.out a.out ip1端口1TCP套接字到多个IP/端口,c,multithreading,network-programming,fork,C,Multithreading,Network Programming,Fork,我正在尝试编写一个连接到多个IP/端口的应用程序,我遇到的问题是,我不知道IP的数量,因此一个部门可以使用它连接到2个IP,而另一个部门可以连接到8个,因此它必须在运行时进行配置,我正在考虑使用线程或fork-inside-loop,但不确定哪一个更适合这项工作,希望有人能在这里指导我,我在Linux下使用C 比如说 可以这样运行它。输出ip1端口1 ip2端口2 ip3端口3 另一个可以像这样运行a.out a.out ip1端口1 谢谢我在这里看到四种设计选择,每种都有优点和缺点。您的选择在
谢谢我在这里看到四种设计选择,每种都有优点和缺点。您的选择在很大程度上取决于应用程序的具体功能
轮询
,然后采取正确的(非阻塞)操作,即读取
、写入
或关闭
。我听说这在单处理器上速度非常快,但是,它没有利用多核架构,编程比较困难我在这里看到四种设计选择,每种都有优点和缺点。您的选择在很大程度上取决于应用程序的具体功能
轮询
,然后采取正确的(非阻塞)操作,即读取
、写入
或关闭
。我听说这在单处理器上速度非常快,但是,它没有利用多核架构,编程比较困难#2有一个非常重要的含义——它使程序成为多线程的。这会让你进入一个充满竞争条件、数据损坏、锁和死锁的激动人心的世界。这是必须考虑的。你的意思是因为fd将在线程之间共享,对吗?@BagDev no.在这种设计中,每个线程都有自己的fd(通过客户端连接时的accept()线程与之通信),并且独立运行。要解决死锁等问题,您必须专门编写一个。如果服务器只是对自己的客户端执行请求/响应,那么它将成为一个阻塞读/写循环。如果一个客户机-服务器线程希望与另一个fd通信(例如聊天),则可能会出现问题。的确,一个线程中的严重错误(如野生指针)确实可能会破坏整个应用程序,但要做到这一点,你必须编写非常糟糕的代码。#2有一个非常重要的含义——它使程序成为多线程的。这会让你进入一个充满竞争条件、数据损坏、锁和死锁的激动人心的世界。这是必须考虑的。你的意思是因为fd将在线程之间共享,对吗?@BagDev no.在这种设计中,每个线程都有自己的fd(通过客户端连接时的accept()线程与之通信),并且独立运行。要解决死锁等问题,您必须专门编写一个。如果服务器只是对自己的客户端执行请求/响应,那么它将成为一个阻塞读/写循环。如果一个客户机-服务器线程希望与另一个fd通信(例如聊天),则可能会出现问题。的确,一个线程中的严重错误(例如,野生指针)可能会导致整个应用程序崩溃,但要做到这一点,您必须编写非常糟糕的代码。