winsocket c++ 非阻塞方式

#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端的架构中,线程量的急剧增加会降低系统的性能





Winsock是Windows系统下用于网络编程的API接口,它提供了一套用于创建和管理网络应用程序的操作函数和数据结构。通过Winsock,我们可以方便地实现Socket编程,构建网络通信的客户端和服务器。 在C语言中进行Winsock编程时,需要引入相应的头文件"winsock2.h",并在程序的开始处调用WSAStartup函数来初始化Winsock库。在完成网络编程后,可以通过调用WSACleanup函数来清理资源。 Winsock的常用函数包括socket、bind、listen、accept、connect、send和recv等,通过这些函数可以实现Socket的创建、绑定、监听、接受连接、建立连接、发送数据和接收数据等操作。通过使用这些函数,我们可以编写出各种网络应用,例如网络聊天室、文件传输程序等。 在Winsock编程中,我们需要创建和管理Socket,通过Socket进行网络通信。Socket是一种抽象的数据结构,它包含了网络通信所需要的相关信息,如IP地址、端口号等。分为流式Socket和数据报Socket两种类型,流式Socket用于可靠传输,数据报Socket用于无连接的传输。 在使用Winsock进行网络编程时,需要注意网络的稳定性和安全性。例如,在进行数据传输时应对数据进行合法性验证和加密处理,以防止数据泄露或者被非法篡改。此外,还需要处理连接中断、数据包丢失等异常情况,以确保网络通信的可靠性。 总之,Winsock C是一种用于在Windows系统下进行网络编程的API接口,通过它可以方便地创建和管理网络应用程序,实现各种网络通信功能。在进行Winsock编程时,需要熟悉Winsock的相关函数和数据结构,并处理网络的稳定性和安全性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值