再写一遍双回射,主要还是按照书上走,也方便自己回顾理解
而且这个代码完美解决了tcp阻塞问题,其实看懂这个代码也理解了为什么上篇的代码网络编程——实现tcp和udp的双回射服务器(c++)-优快云博客
会被阻塞,读者可以自己思考下
本书还是采用的是select的方法来实现双回射的服务器。
一、基本思路流程图:
一、主要实现过程:
创建三个套接字:
SOCKET tcp_sock = INVALID_SOCKET;//tcp监听套接字
SOCKET udp_sock = INVALID_SOCKET;//udp套接字
SOCKET tcp_clnt_sock = INVALID_SOCKET;//tcp连接套接字
初始化套接字:
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed");
}
对监听和udp两个套接字进行基本操作:
tcp_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
udp_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
//这一步上次文章有讲到,目的是能够快速重新使用该端口
int opt = 1;
setsockopt(tcp_sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt));
setsockopt(udp_sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt));<