加一个类从CSocket类继承,然后重栽类成员函数,其中有OnRecv,OnSend,等等!
解决方案 »
- getBoundingClientRect 取坐标问题
- 求助:关于OnNewDocument的问题
- BYTE buffer[0x1000]这句话什么意思啊
- 求助:谁有VC++编写的语音聊天程序(要源代码)~~~~~~
- 请教一个问题 急用!!!!!!!!!!!!
- 模态对话框中创建非模态对话框,怎样在前者中修改后者的CEdit控件文本?
- 请教在mfc窗体上显示一图片
- 要做一个图书馆管理系统,请提些意见,加100分
- 请高手指点,请问我在一个对话框类中打开数据库记录集,是否需要关闭
- 讨论第三层代理,有意者请
- 怎么用编程实现操作代理服务器,控制某台通过代理服务器的电脑上网或者不能让它上网?
- 如何获取IP地址?
sockListen.Create(6802,SOCK_STREAM,"135.10.200.35");
sockListen.Bind(6801,"135.10.200.35");
sockListen.Listen(5);
sockListen.Accept(m_sockSend);
sockListen.Close();
SetTimer(1,1000,NULL);
return TRUE;client等给了分给你
sockListen.Create(6802,SOCK_STREAM,"135.10.200.35");
sockListen.Bind(6801,"135.10.200.35");
sockListen.Listen(5);
sockListen.Accept(m_sockSend);
sockListen.Close();
SetTimer(1,1000,NULL);
return TRUE;client等给了分给你
然后WSAWaitForMultipleEvents等待事件消息
再用WSAEnumNetworkEvents判断时间消息并针对编写处理程序
2.如果用CSocket,可以重载OnAccept()函数,在里面处理连接请求就行了。不用WSAAsyncSelect()了,CSocket封装了WSAAsyncSelect(),OnAccept()函数就相当于FD_ACCEPT。
3.CSocket可以重载几个函数,OnAccept()表示有连接请求,OnReceive()表示缓冲区有数据待接受,OnWrite()和FD_WRITE一样,OnClose()表示连接中断,一般要在这里关闭socket。
可是哥们,服务器端用窗口消息响应可不行呀,效率太低了,两三台机器玩玩还可以,作为要应付大量访问的服务器,select,WSAAsyncSelect,WSAEventSelect恐怕都跟不上,用overlapped i/o或者iocompletionport吧,效率高多了。
我想用winsock提供的接口函数直接做,所以不知道(特别是服务器端)如何
知道:
1。listen后什么时候能ACCept(),这个listen() accept()应放在MFC程序中的什么地方
2. 什么时候知道有消息到来(特别是服务器端),如果服务器端有二个以上的连接,怎么
才能知道是哪个socket的消息?快回答, 马上给分
主 题:多线程WinSock服务器框架程序(源代码),我写的,与大家探讨.
作 者:zb_china
所属论坛:Visual C++
看看吧,也许有帮助.
{
closesocket(ScadaSocketList[LocalSocketPosi].m_pSocket);
ScadaSocketList[LocalSocketPosi].m_pSocket = INVALID_SOCKET;
return FALSE;
}
if(WSAAsyncSelect(ScadaSocketList[LocalSocketPosi].m_pSocket,m_hWnd,UM_SOCK,FD_ACCEPT|FD_READ)==SOCKET_ERROR)
{
closesocket(ScadaSocketList[LocalSocketPosi].m_pSocket);
ScadaSocketList[LocalSocketPosi].m_pSocket = INVALID_SOCKET;
return FALSE;
}
LONG CMainFrame::OnSocketMessage(UINT wParam,LONG lParam)
{ int msg=WSAGETSELECTEVENT(lParam); switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
{
int len;
SOCKADDR_IN clientAddr;
SOCKET sockClient;
len = sizeof(clientAddr);
sockClient = accept(ScadaSocketList[LocalSocketPosi].m_pSocket,(struct sockaddr FAR *)&clientAddr,&len);//×èÈûµ÷Óà if(sockClient == -1)
SocketError();
else
{
for(int i=LocalSocketPosi+1;i<NodeNum;i++)
{
if(ScadaSocketList[i].SocketAddr.sin_addr.s_addr == clientAddr.sin_addr.s_addr)
{
ScadaSocketList[i].m_pSocket = sockClient;
ConnectString[i].Format(" %s ½ÓÊÜ %s µÄÁ¬½Ó³É¹¦.......",LocalName,ScadaSocketList[i].NodeName);
}
}
}
}
break;
case FD_READ:
{
for(int i=0;i<NodeNum;i++)
{
if(i!=LocalSocketPosi)
{
if(WSAAsyncSelect(ScadaSocketList[i].m_pSocket,m_hWnd,UM_SOCK,FD_READ|FD_WRITE|FD_ACCEPT)==SOCKET_ERROR)
{
closesocket(ScadaSocketList[i].m_pSocket);
ScadaSocketList[i].m_pSocket = INVALID_SOCKET;
}
int len = recv(ScadaSocketList[i].m_pSocket,(char *)RecvBuffer,20,0);
if(len<=0)
continue;
CString szMsg = RecvBuffer;
RecvNum[i]++;
RecvString[i].Format("µÚ%3d´Î%10s½ÓÊÕµ½Êý¾Ý(%10s)³É¹¦",RecvNum[i],LocalName,szMsg);
// TRACE(RecvString[i]);
break;
}
}
} break; default:
break;
}
return 0;
}