348_《Windows网络编程》_罗莉琴版_8.3节_基于Select模型的Socket编程_代码_select-model.pdfVIP

  • 20
  • 0
  • 约8.5千字
  • 约 7页
  • 2020-10-21 发布于广东
  • 举报

348_《Windows网络编程》_罗莉琴版_8.3节_基于Select模型的Socket编程_代码_select-model.pdf

Creat on 2015-09-05 《Windows网络编程》_罗莉琴版_8.3节_基于Select模型的Socket编程_代码 ——独立观察员 2014.04.26 说明: (我们网络编程的课本)中,第8.3小节——基于Select模型的Socket编程中的代码。 配套的代码中没有这个,课件(PPT)中有前面一小部分代码,网上也没找到这个,为了做作业,只好 手敲了。手打得挺辛苦,为了大家不再辛苦,所以发上来。另外,有些小地方做了改动,还有难免可能 出错,所以建议对照书本学习。 以下就是代码: #include stdio.h #include winsock2.h #pragma comment(lib, ws2_32.lib) #include tchar.h #define PORT 8888 #define DATA_BUFSIZE 1024 /* Select()函数原型: int select( int nfds, //会被忽略; fd_set * readfds, //用于检测可读性的Socket集合; fd_set * writefds, //可写性的; fd_set * exceptfds, //错误的; const struct timeval* timeout //等待的时间,设为null则是阻塞模式; ); typedef struct fd_set { u_int fd_count; SOCKET fd_array[FD_SETSIZE]; } fd_set; FD_CLR(s, *set) 从集合中删除指定的套接字; FD_ISSET(s, *set) 如果参数s是集合中的成员,则返回非0值,否则返回0; FD_SET(s, *set) 向集合中添加套接字; FD_ZERO(s, *set) 将集合初始化为空集合; */ /* 《Windows网络编程》 8.3 基于Select模型的Socket编程; Creat on 2015-09-05 独立观察员倾情手打 */ typedef struct _SOCKET_INFORMATION{ CHAR Buffer[DATA_BUFSIZE];// 发送和接收数据的缓冲区 WSABUF DataBuf; // 定义发送和接收数据缓冲区的结构体,包括缓冲区的长度和内容 SOCKET Socket; // 与客户端进行通信的套接字 DWORD BytesSEND; // 保存套接字发送的字节数 DWORD BytesRECV; // 保存套接字接收的字节数 }SOCKET_INFORMATION, * LPSOCKET_INFORMATION; /* winsock2.h中定义的结构体; typedef struct _WSABUF { u_long len; // the length of the buffer char FAR * buf; // the pointer to the buffer } WSABUF, FAR * LPWSABUF; */ //记录正在使用的套接字总数量; DWORD TotalSockets = 0; //保存Socket信息对象的数组(Socket集合),FD_SETSIZE表示SELECT模型中允许的最大Socket数量 (64); LPSOCKET_INFORMATION SocketArray[FD_SETSIZE]; SOCKET ListenSocket; // 监听套接字 SOCKET AcceptSocket; // 与客户端进行通信的套接字 SOCKADDR_IN InternetAddr; // 服务器的地址 WSADATA wsaData; // 用于初始化套接字环境 INT Ret; // WinSock API的返回值 FD_SET WriteSet; // 获取可写性的套接字集合 FD_SET ReadSet; // 获取可读性的套接字集合 DWORD Total = 0; // 处于就绪状态的套接字数

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档