扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
#include "winsock.h" |
CSize sizeTotal;//控制滚动条 int count;//信息条数 CString m_data[1000];//信息存放 char Hostname[260]; char Hostaddress[20];//主机IP地址 SOCKET m_sock; HANDLE m_hListenThread;//线程 BOOL m_bInitialized;//是否初始化 WSADATA WSAData; BOOL flag; SOCKADDR_IN saClnt; int saClntLen; BOOL Isconnect;//是否连接 |
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 *)this,0,&idThread); if(m_hListenThread) { m_data[3]+="Succeeded"; m_data[4]+="Listening...."; } else m_data[4]+="Failed"; } |
CServerView::~CServerView() { if(m_bInitialized) WSACleanup(); closesocket(m_sock); if(m_hListenThread) ::TerminateThread(m_hListenThread,0); } |
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 "; pView- >InvalidateRect(NULL); } else { switch(msg[0]) { case ’A’: wsprintf(msg,"A:Client from %s attached ", 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 ", 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); } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者