gpt4 book ai didi

c - 如何在同一个C程序中监听套接字并连接到不同的套接字(相同的IP地址但不同的端口号)

转载 作者:行者123 更新时间:2023-11-30 17:44:47 25 4
gpt4 key购买 nike

嗨,我正在想办法在同一个程序中同时监听套接字并连接到不同的套接字(在相同的IP但不同的端口号上)。当我监听套接字时,它会一直阻塞,直到它收到一些消息,因此我无法同时收听和连接。我实际上需要模拟不同路由器之间LSP数据包的交换。所以我正在编写一个程序来模拟路由器,以便运行它n(路由器数量)次。

有人可以分享一下如何进行吗?

最佳答案

如果我正确理解您的问题,其中之一可能会有所帮助。

多线程或多进程

基本上,当您收到客户端时,您可以在单独的线程或新进程中单独处理客户端。您将能够接收传入连接并连接到来自其他来源的新客户端,同时处理已连接的客户端。

伪代码:

main() {
while(1) {
accept client
/*
After the fork or creation of the new thread, the loop goes back to
accepting clients while connected clients are being processed.
*/
fork or create new thread passing and client socket to it
}
}

processClient() {
do whatever you need to do...
}

选择

Select 是实现非阻塞套接字的另一种好方法。 Select 基本上等待数据(即数据、新客户端请求)到达服务器并一一处理它们。服务器不会在接受时阻塞,因为它会等到收到某些内容后再进行处理。

伪代码:

main() {
while(1) {
wait on select
if new client {
accept it
}
for client in clients {
if client has data {
process it
}
}
}
}

ePoll(如果您使用的是 Linux)

ePoll 与 Select 类似,只是它可以处理更多的客户端,而且更有吸引力。

这是一个包含所有这些内容的存储库。我的代码在这里并不完美,因为这是我在学校时完成的一个项目。

https://github.com/koralarts/ServerBenchmarking

关于c - 如何在同一个C程序中监听套接字并连接到不同的套接字(相同的IP地址但不同的端口号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com