|
|
【参加讨论】
天极it资讯短信服务 电脑小技巧
| 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。(首月免费) |
|
网络编程已经成为一种时髦,以tcp/ip协议的网络更为流行.自己编一个服务器与客户机互相传送消息的程序,以便增加自己网络编程的经验.下面我就介绍一下我编的程序.
首先介绍服务器程序:
1.创建一个名为"server"的项目,单文档界面.
2.在serverview.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;//是否连接 |
3.在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 *)this,0,&idthread); if(m_hlistenthread) { m_data[3]+="succeeded"; m_data[4]+="listening...."; } else m_data[4]+="failed"; } |
4.在析构函数中完成必需的清除操作:
cserverview::~cserverview() { if(m_binitialized) wsacleanup(); closesocket(m_sock); if(m_hlistenthread) ::terminatethread(m_hlistenthread,0); } |
5.定义接收和处理消息的线程:
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); } |
共3页。 1 2 3 8 :
编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:实例解析ipv6下的vc网络编程
下一篇:visual c++串行化编程
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
|
|
|