首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【网络编程】之6、选择select

2012-09-18 
【网络编程】之六、选择selectselect模型在五中模型中是最简单,最容易实现的,当然他的效率当然不如其他四种;s

【网络编程】之六、选择select

  select模型在五中模型中是最简单,最容易实现的,当然他的效率当然不如其他四种;

select可以去监视一个套接字,看哪个socket有消息到来;

/**************************************************文件名server.cppwindows下socket网络编程实例  -- 服务器端基于TCP服务器地址:'127.0.0.1'端口号 8888作者:peter***************************************************/#include<WinSock2.h>#include<stdio.h>#pragma comment(lib,"WS2_32.lib")bool select_server(SOCKET sock, int nTime = 100, bool bRead = true);int main(int argc, char* argv[]){WSADATA wsaData;WORD sockVersion = MAKEWORD(2,0);//指定版本号::WSAStartup(sockVersion, &wsaData);//载入winsock的dll//创建套接字基于TCPSOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s == INVALID_SOCKET){printf("error");::WSACleanup();//清理,释放资源return 0;}sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);//端口号8888sin.sin_addr.S_un.S_addr = INADDR_ANY;//地址全是0,也就是所有的地址//绑定socketif(::bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("error");::WSACleanup();//清理释放资源return 0;}//监听socketif(::listen(s, 2) == SOCKET_ERROR){printf("error");::WSACleanup();//释放资源return 0;}sockaddr_in remoteAddr;int nAddrLen = sizeof(remoteAddr);SOCKET client;char szText[] = "peter\n";//缓冲区数据char szBuf[1024] = {0};while(1){fd_set fdset;FD_ZERO(&fdset);FD_SET(s, &fdset);timeval tv;tv.tv_sec  = 3;tv.tv_usec = 0;int n;if (n = select(0, &fdset,NULL, NULL, &tv) == SOCKET_ERROR){continue;}if(FD_ISSET(s,&fdset)){/*accept服务器端使用,调用函数进入阻塞状态,等待用户连接,如果没有客户端进行连接,程序就在这个地方。不会看到后面。如果有客户端连接,那么程序就执行一次然后继续循环到这里等待。*/client = ::accept(s, (SOCKADDR*)&remoteAddr, &nAddrLen);if(client == INVALID_SOCKET){printf("error");continue;}printf("接收到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));::send(client, szText, strlen(szText), 0); //发送数据int re = ::recv(client, szBuf, 1024, 0);if(re > 0){szBuf[re] = '\n';printf(szBuf);}::closesocket(client);//关闭套接字}}::closesocket(s);::WSACleanup();return 0;}
客户端见前面的【网络编程】之四、socket网络编程例解  ;

稍后会写一个简易的聊天程序,将源码贴出,稍后!




2012/8/22

jofranks 于南昌

热点排行