服务器与客户机互传消息
2008-03-08 12:41:49 来源:WEB开发网核心提示:一、 服 务 器 程 序创 建 一 个 名 为“server" 的 项 目, 单 文 档 界 面。 在serverview.h 中 加 入 代 码: #include “winsock.h"添 加 变 量:CSize sizeTotal;// 控 制 滚 动 条int count;// 信 息 条
一、 服 务 器 程 序
创 建 一 个 名 为“server" 的 项 目, 单 文 档 界 面。
在serverview.h 中 加 入 代 码:
#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;// 是 否 连 接
在serverview.cpp 中 重 载CServerView() 构 造 器, 创 建 并 绑 定 嵌 套 字:
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";
}
在 析 构 函 数 中 完 成 必 需 的 清 除 操 作:
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\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 ->
- ››消息称中国移动即将获得iPhone 4销售权
- ››服务器群集:Windows 2000 和 Windows Server 200...
- ››服务器维护经验谈 图解DHCP故障排除
- ››消息称联通高层赴美谈引入iPhone4 将带WiFi
- ››消息称微软将在近期发布IE9 beta
- ››消息称台湾最快7到8月引入新版iPhone
- ››消息称微软中国Windows 7正版验证计划或将推迟
- ››消息称富士康今年交付2400万部iPhone 4G
- ››服务器虚拟化后需要完成的八大关键任务
- ››消息称谷歌与运营商分享 Android 广告收入
- ››消息称联通约见开发者商谈 iPhone 应用软件
- ››消息称 WiFi 版 iPhone 已经到位 可能在3月份推出...
更多精彩
赞助商链接