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

时间:2013-11-08 00:27:49

标签: c sockets

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

有人可以分享如何继续吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,其中一个可能会有所帮助。

多线程或多进程

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

伪代码:

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基本上等待数据到达(即数据,新客户端请求)到服务器并逐个处理它们。服务器不会在接受时阻塞,因为它会在处理之前等待它收到一些东西。

Psuedo代码:

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