使用C ++在服务器上同时监听UDP和TCP

时间:2015-09-16 18:42:17

标签: multithreading sockets tcp udp pthreads

我正在尝试编写套接字和客户端程序,这样服务器应该同时监听两个连接。

例如,当我启动服务器时,它将侦听UDP端口以及TCP端口,每当UDP客户端发送消息时,它必须处理它,当TCP客户端发送消息时,它必须处理它。

我尝试使用pthreads而无法达到我想要的效果。

以下是C ++代码

中的详细信息

以下函数将由相应的pthreads调用

void *TCP(void *ptr)
{
    char tcp[MAXDATASIZE];
    cout << "\nEnter TCP port number\n";
    cin >> tcp;
    Server tcpServer(tcp,1);
    tcpServer.testbind(1);
    pthread_exit(NULL);

}

void *UDP(void *ptr)
{
    char udp[MAXDATASIZE];
    cout << "\nEnter UDP port number\n";
    cin >> udp;
    Server udpServer(udp,2);
    udpServer.testDNS(2);
    pthread_exit(NULL);

}

主程序

int main(int c, char *argv[])
{
  char tcp[MAX],udp[MAX];
  int choice,choice1;
  void *i;
  pthread_t tcpThread,udpThread;
  int tcpThreadCheck,udpThreadCheck;
  pthread_attr_t attr;
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
  choice1 = pthread_create(&tcpThread,NULL,testTCP,i);
  choice = pthread_create(&udpThread,NULL,testUDP,i);
  if(choice <0) cout <<" Main tcp thread failed"<<endl;
  if(choice1 <0) cout <<" Main udp thread failed"<<endl;

  pthread_attr_destroy(&attr);
  pthread_exit(NULL);
}

每当我尝试运行此服务器程序时,我都会以模拟方式或干草方式获得“输入TCP端口号”和“输入UDP端口号”。我希望bot能够独立运行tcpServer和udpServer并处理来自各个客户端的传入数据。

任何人都可以在这里帮助我,如何实现这一目标。有什么例子吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你启动两个线程,它们同时执行。当然,他们同时打印他们的东西,他们也会同时阅读std :: cin和风景效果。我建议您在启动线程之前从用户获取端口,然后将已知端口提供给线程。

您的代码也存在其他问题 - 您不应该从main()中获取pthread_exit,并且在您的情况下不需要pthread_attr - 您可以简单地提供NULL,默认值正是您提供的。