winsocket c++ 非阻塞方式

原创 2016年08月29日 11:11:55
#include <WinSock2.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")


int main()
{
//加载socket动态库
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2,2);
auto err = WSAStartup(wVersionRequested, &wsaData);
if(err != 0)
{
int c = 0;
}
if(LOBYTE(wsaData.wVersion) != 2 ||
  HIBYTE(wsaData.wVersion) != 2)
{
int c = 0;
}




SOCKET socketSer = socket(AF_INET, SOCK_STREAM, 0);


//定义成非阻塞
int per = 1;
if(ioctlsocket(socketSer,FIONBIO,(u_long *)&per) != 0)
{
int c = 0;
}


SOCKADDR_IN serverAddr;
    memset(&serverAddr,0,sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(22000);       
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/


bind(socketSer,(struct sockaddr *)&serverAddr,sizeof(serverAddr));
listen(socketSer,5);


SOCKADDR_IN  socketClient;
int socketLength = sizeof(SOCKADDR);







while(true)
{


//非堵塞 立即返回
SOCKET Command_Sock = accept(socketSer, (SOCKADDR*)&socketClient,&socketLength);
if(Command_Sock == INVALID_SOCKET)
{
Sleep(100);
continue;
}
char data[50];
printf("IP:%s",inet_ntoa(socketClient.sin_addr));
//非堵塞 立即返回
recv(Command_Sock,data,sizeof(data),0);
printf("%s\n",data);
closesocket(Command_Sock);
//WSACleanup();

}




    WSACleanup();
return 0;

}





或者另一种方式


前面监听什么都一样


//后面就不同

在线程中轮询调用accept 如果有连接再开创一个子线程用于和client端对话,


这种不适合用于有大量client端的架构中,线程量的急剧增加会降低系统的性能





版权声明:本文为博主原创文章,未经博主允许不得转载。

Winsocket 三:非阻塞server&client程序(tcp)

在 Winsocket 一:单线程阻塞server&client程序(tcp) 和 Winsocket 二:多线程阻塞服务器程序(tcp)简单接收了阻塞tcp程序,阻塞式tcp程序服务器程序会因为建...
  • u013071074
  • u013071074
  • 2014年05月20日 11:58
  • 1642

socket阻塞与非阻塞模式

本文转载 http://blog.sina.com.cn/s/blog_63e164b00100mfvu.html 阻塞模式 Windows套接字在阻塞和非阻塞两...
  • yu_sn0w
  • yu_sn0w
  • 2015年11月27日 13:14
  • 1643

socket编程 —— 非阻塞socket

在上一篇文章 《socket编程——一个简单的例子》 http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单的tcp ...
  • wind19
  • wind19
  • 2011年01月21日 15:15
  • 27193

socket阻塞与非阻塞模式

本文转载 http://blog.sina.com.cn/s/blog_63e164b00100mfvu.html 阻塞模式 Windows套接字在阻塞和非阻塞两...
  • yu_sn0w
  • yu_sn0w
  • 2015年11月27日 13:14
  • 1643

C/C++——网络开发中的 同步&异步 阻塞&非阻塞

网络应用开发中的同步和异步,阻塞和非阻塞的关系
  • qq_35162107
  • qq_35162107
  • 2016年12月15日 12:01
  • 1203

winsocket异步模型--select模式介绍

winsocket创建的套接字默认都是阻塞的,阻塞的意思其实很简单,就是不到黄河不死心的工作方式,譬如我们现在要从这个socket recv数据,如果这个时候没有数据可读或者不可读,那它就会等在那,r...
  • lizheng308
  • lizheng308
  • 2014年07月02日 10:38
  • 1893

android socket链接 NIO非阻塞方式

最近在研究android的推送,
  • hzqhbc
  • hzqhbc
  • 2014年11月05日 15:47
  • 8037

java NIO非阻塞方式的Socket编程

1.非阻塞方式的Socket编程: 传统阻塞方式的Socket编程,在读取或者写入数据时,TCP程序会阻塞直到客户端和服务端成功连接,UDP程序会阻塞直到读取到数据或写入数据。阻塞方式会影响程...
  • scum321
  • scum321
  • 2012年06月25日 20:59
  • 232

Linux下socket设置为非阻塞方式和fcntl系统调用

http://www.linuxidc.com/Linux/2011-04/34674.htm用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETF...
  • ztguang
  • ztguang
  • 2016年03月30日 10:21
  • 448

Linux网络编程一步一步学-设置非阻塞方式

关键词: Linux    网络    socket    非阻塞    nonblock                                           ...
  • cuiyifang
  • cuiyifang
  • 2012年10月29日 09:25
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:winsocket c++ 非阻塞方式
举报原因:
原因补充:

(最多只允许输入30个字)