给出源码最好!!!
解决方案 »
- 下学期的今天我估计就是考研大军的一员(不是水贴)。。。
- mfc com组件中的参数问题
- 求助~请问在MFC下怎么样用fopen()和fwrite()来实现txt的合并呀。?
- CListBox中用InsertString方法不回显吗?
- 大虾救命!
- 自绘控件
- 请问如何读取word文档中的表格中的数据?
- 我AfxBeginThread(Function,NULL);出错.说不能将 void变成(void**),为什么?
- 继续FTP服务测试,不限速,不限线程,越多越好,欢迎上传...
- mfc dll请教
- 单文档编译运行出现--建立空文档失败--是怎么回事?
- 如何给一个自己写的Windows Service发消息或和他通讯,我发给普通应用程序没问题,可Service既不能发给别的应用,也不能接收,怎么办?
CServerView::CServerView()
{ // TODO: add construction code here
Isconnect=FALSE;
flag=FALSE;
sizeTotal.cy=350;
sizeTotal.cx=300;
m_hListenThread;
count=5;
int status;
WSADATA wsaData;
m_data[0]=“initializing Windows Sockets DLL....";
if((status=WSAStartup(0x0101, &wsaData))==0)
{ m_data[0] +=“Succeeded";
m_bInitialized=TRUE;
}
else
{ m_bInitialized=FALSE;
}
m_sock=socket(AF_INET,SOCK_DGRAM,0);
m_data[1]=“Creating socket....";
if(m_sock==INVALID_SOCKET)
{ m_data[1] +=“Failed";
}
m_data[1] +=“Succeeded";
m_data[2]=“Binding socket....";
sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sa.sin_port=htons(5050);
if(bind(m_sock,(PSOCKADDR)
&sa,sizeof(sa))==SOCKET_ERROR)
{ m_data[2] +=“Failed";
closesocket(m_sock);
}
m_data[2] +=“Succeeded";
m_data[3]=“Creating listener thread....";
unsigned long idThread;
m_hListenThread=CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)Listen,
(void if(m_hListenThread)
{ m_data[3] +=“Succeeded";
m_data[4] +=“Listening....";
}
else
m_data[4] +=“Failed";
}
定 义 接 收 和 处 理 消 息 的 线 程:
long WINAPI Listen(CServerView *pView)
{ char msg[2000]=“";
int nchar;
SOCKADDR_IN saClnt;
int saClntLen;
while(1)
{ saClntLen=sizeof(saClnt);
nchar=recvfrom(pView ->m_sock,msg,1024,0,
(PSOCKADDR) &saClnt, &saClntLen);
if(nchar<0)
{ pView ->m_data[pView ->count + +] +
=“Error in recvfrom\n";
pView ->InvalidateRect(NULL);
}
else
{switch(msg[0])
{
case ‘A':
wsprintf(msg,“A:Client from %s attached\n",
inet_ntoa(saClnt.sin_addr));
pView ->m_data[pView ->count + +]=msg;
pView ->flag=TRUE;
pView ->InvalidateRect(NULL);
pView ->Isconnect=TRUE;
pView ->saClnt=saClnt;
pView ->saClntLen=saClntLen;
sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR)
&saClnt,saClntLen);
break;
case ‘D':
wsprintf(msg,“D: Client form %s detached\n",
inet_ntoa(saClnt.sin_addr));
pView ->m_data[pView ->count + +]=msg;
pView ->flag=TRUE;
pView ->InvalidateRect(NULL);
pView ->Isconnect=FALSE;
sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR)
&saClnt,saClntLen);
break; case ‘R':
saClntLen=sizeof(saClnt);
pView ->m_data[pView ->count + +]=msg;
pView ->flag=TRUE;
pView ->InvalidateRect(NULL);
break; default:
break;
}
}
}
return(0);
}
添 加 接 收 与 发 送 消 息 的 线 程:
long WINAPI Listen(CClientView *pView)
{ char msg[2000];
pView ->m_data[5]=“Sending ATTACH command";
pView ->InvalidateRect(NULL);
wsprintf(msg,“A: ");
sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR)
&pView ->m_saSrvr,sizeof(pView ->m_saSrvr));
int saSrvrLen ,nchar;
while(1)
{saSrvrLen=sizeof(pView ->m_saSrvr);
nchar=recvfrom(pView ->m_sock,msg,1024,0,
(PSOCKADDR) &pView ->m_saSrvr, &saSrvrLen);
if(nchar<0)
{ pView ->m_data[pView ->count + +]=
“Error in recvform";
pView ->InvalidateRect(NULL);}
else
{ pView ->m_data[pView ->count + +]=msg;
pView ->Isconnect=TRUE;
pView ->flag=TRUE;
pView ->InvalidateRect(NULL);
}
}
return(0);
}