我正在尝试编写套接字和客户端程序,这样服务器应该同时监听两个连接。
例如,当我启动服务器时,它将侦听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并处理来自各个客户端的传入数据。
任何人都可以在这里帮助我,如何实现这一目标。有什么例子吗?
提前致谢。
答案 0 :(得分:1)
你启动两个线程,它们同时执行。当然,他们同时打印他们的东西,他们也会同时阅读std :: cin和风景效果。我建议您在启动线程之前从用户获取端口,然后将已知端口提供给线程。
您的代码也存在其他问题 - 您不应该从main()中获取pthread_exit,并且在您的情况下不需要pthread_attr - 您可以简单地提供NULL,默认值正是您提供的。