[英]Select between TCP socket and UDP socket(c)
我正在 c 中創建一個服務器,它處理 tcp 連接以供管理員更改服務器配置和 udp 連接以處理多個客戶端
這是我的代碼:
struct sockaddr_in si_minhaTCP,si_minhaUDP, si_outra;
int nready, maxfdp1;
int fdTcp;
int fdUdp;
fd_set rset;
if (argc != 4) {
printf("server {client port(udp)} {admin port(tcp)} {registry file path}\n");
exit(-1);
}
fdTcp = socket(AF_INET, SOCK_STREAM, 0);
bzero(&si_minhaTCP, sizeof(si_minhaTCP));
si_minhaTCP.sin_family = AF_INET;
si_minhaTCP.sin_addr.s_addr = htonl(INADDR_ANY);
si_minhaTCP.sin_port = htons((short) atoi(argv[2]));
bind(fdTcp, (struct sockaddr*)&si_minhaTCP, sizeof(si_minhaTCP));
listen(fdTcp, 10);
fdUdp = socket(AF_INET, SOCK_DGRAM, 0);
si_minhaUDP.sin_family = AF_INET;
si_minhaUDP.sin_addr.s_addr = htonl(INADDR_ANY);
si_minhaUDP.sin_port = htons((short) atoi(argv[1]));
bind(fdUdp, (struct sockaddr*)&si_minhaUDP, sizeof(si_minhaUDP));
FD_ZERO(&rset);
maxfdp1 = max(fdTcp, fdUdp) + 1;
for (;;)
{
FD_SET(fdTcp, &rset);
FD_SET(fdUdp, &rset);
// select the ready descriptor
nready = select(maxfdp1, &rset, NULL, NULL, NULL);
if (FD_ISSET(fdTcp, &rset))
{
//handle tcp connection
}
if (FD_ISSET(fdUdp, &rset))
{
//handle udp connection
}
}
當我運行此代碼並嘗試使用 udp 客戶端對其進行測試時,它什么也沒做
但是,如果您以 root 身份運行程序並且沒有其他程序正在運行,那么您可以使用低於 1024 的端口,這些程序已經使用了該端口...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.