新建接收数据线程
来源:互联网 发布:声音模拟的软件 编辑:程序博客网 时间:2024/06/05 06:12
//C++版
unsigned nThreadId;
////新起用来监听端口过来的连接请求线程HANDLE hThreadListenPort = (HANDLE)_beginthreadex( NULL, 0, &ListenPort, NULL, 0,&nThreadId );
//用来监听端口过来的连接请求
unsigned int _stdcall ListenPort(LPVOID lpThreadParameter)
{
//初始化winsocket
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节
err = WSAStartup( wVersionRequested, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。
if ( err != 0 )
{
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容
{
WSACleanup( );
return 0;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,对应tcp;0指定网络协议为TCP/IP
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //htonl用来将主机字节顺序转换为网络字节顺序(to network long)
//INADDR_ANY就是指定地址为0.0.0.0的地址,
//表示不确定地址,或“任意地址”。”
addrSrv.sin_family=AF_INET;
int int_port=8000;
addrSrv.sin_port=htons(int_port);//htons用来将主机字节顺序转换为网络字节顺序(to network short)
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将本地地址绑定到所创建的socket上,以使在网络上标识该socket
listen(sockSrv,5);//socket监听,准备接受连接请求。
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
//接到连接请求
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//为一个连接请求提供服务。addrClient包含了发出连接请求的客户机IP地址信息;返回的新socket描述服务器与该客户机的连接
SOCKET* pSocket=new SOCKET();
memcpy(pSocket,&sockConn,sizeof(SOCKET));
unsigned int ThreadId;
HANDLE hNewListenThread = (HANDLE)_beginthreadex( NULL, 0, &ReceiveDataFromClient,(void*)pSocket, 0,&ThreadId );
}
}
unsigned __stdcall ReceiveDataFromClient(void *param)
{
SOCKET* pSocket=(SOCKET*)param;
SOCKET Socket=*pSocket;
char Buf[8000];
while(true)
{
memset(Buf,0,sizeof(Buf));
if (SOCKET_ERROR==recv(Socket,Buf,sizeof(Buf),0))
{
int Error=WSAGetLastError();
int Index=(int)Socket;
printf("端口%d 连接断开\n",Index);
return 0;
}
else
{
string ReceiveRequest(Buf);
if(ReceiveRequest!="")
{
printf("接收到的字符串是:%s\n",Buf);
}
}
}
}
- 新建接收数据线程
- 5.6.3 数据接收线程
- 主线程接收子线程数据
- Python使用线程来接收串口数据
- 新建线程
- mac osx 中 runModalWindow 阻塞usb数据接收线程
- 使用线程接收串口接收数据,DLT645 2007 智能电表抄表代码
- 新建一个线程去运行下载数据或数据查询的操作
- java新建一个线程
- C++新建线程实例
- No2.新建线程
- c++新建线程
- 结束socket接收线程
- 消息接收线程
- 串口非线程接收
- 线程接收和发送
- HDFS1.0源代码解析—DataNode数据接收线程DataXceiverServer与DataXceiver解析
- Android新起线程 http请求数据发送 handler接收处理
- VS2012引入静态和动态链接库
- Java判断字符串是否为空
- POJ 2976 Dropping tests
- activity全屏
- asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 新建接收数据线程
- 读《代码优化:有效使用内存》
- 如何在Cocos2d-x中集成LiquidFun(二)
- JavaFX学习之道:FileChooser 、POI导出Excel文件
- Linux常用解压打包命令
- zookeeper --Refusing session request for client
- 非常不错的手写的数据库连接池
- C#学习记录
- linux查看CPU位数