我的在收到数据解析以后呢,不是发送给原来的连入套接字,而是要发送给好几个终端,请问,这里我的线程该如何安排呢,套接字该如何处理呢
解决方案 »
- vc++中 go to definition如何实现
- 如何使用CJ60Lib
- 有没有可能在我自己写的程序中把sourcesafe集成进来?像VC那样多一个toolbar和menu。
- 如何在richedit里显示icon和gif图片?
- itoa(m_Calendar1.GetDay(),cDay,10);编译通过,运行时出错!!
- 如何实现OpenGL双缓冲
- 在vc中如何使用ping.exe?
- 谢谢,这行代码什么意思
- 求助:电子稳像
- 如何编程实现过滤驱动的安装啊,有.inf和.sys文件,例如:kbfiltr.inf和kbfiltr.sys。
- 如何下载CSDN VC编程经验总结
- 请问最好的嗅探器、扫描器软件都是什么?
while(1)
{
SOCKET TempSocket=accept(ListenSocket,NULL,NULL);
m_connectionList.AddTail(TempSocket);
DWORD RecvBytes;
DWORD TransferedBytes;
DWORD EventTotal=0;
DWORD Flags;
WSABUF DataBuf;
WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS];
WSAOVERLAPPED AcceptOverlapped;
TCHAR Buffer[DATA_BUFSIZE];
memset(Buffer,0,DATA_BUFSIZE);
ZeroMemory(&AcceptOverlapped,sizeof(WSAOVERLAPPED));
EventArray[EventTotal]=WSACreateEvent();
AcceptOverlapped.hEvent=EventArray[EventTotal];
DataBuf.buf=Buffer;
DataBuf.len=DATA_BUFSIZE;
EventTotal++;
WSARecv(TempSocket,&DataBuf,1,&RecvBytes,&Flags,&AcceptOverlapped,NULL);
while (true)
{
DWORD Index=WSAWaitForMultipleEvents(EventTotal,EventArray,FALSE,WSA_INFINITE,FALSE);
WSAResetEvent(EventArray[Index-WSA_WAIT_EVENT_0]);
WSAGetOverlappedResult(TempSocket,&AcceptOverlapped,&TransferedBytes,FALSE,&Flags);
if(TransferedBytes==0)
{
closesocket(TempSocket);
WSACloseEvent(EventArray[Index-WSA_WAIT_EVENT_0]);
break;
}
else
{
m_CCmdBufferDataList.AddTail(CCmdBuffer(LPBYTE(DataBuf.buf), DataBuf.len));
VERIFY(SendDataToAll()==TRUE);
}
Flags=0;
ZeroMemory(&AcceptOverlapped,sizeof(WSAOVERLAPPED));
AcceptOverlapped.hEvent=EventArray[Index-WSA_WAIT_EVENT_0];
DataBuf.buf=Buffer;
DataBuf.len=DATA_BUFSIZE;
WSARecv(TempSocket,&DataBuf,1,&RecvBytes,&Flags,&AcceptOverlapped,NULL);
}
}
CloseHandle(m_hThread);
return 0;
加到一个独立的线程中,其中可以将接受连接SOCKET加到一个static 的链表之中,在发送!!
你能借一份多线程完成端口的例程给我学习一下吗?
不胜感激!