计算机通信网.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:28 大小:1.6MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

计算机通信网.ppt

计算机通信网.ppt

预览

免费试读已结束,剩余 18 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VC++6.0网络编程——一个简单的聊天室的设计Windows套接字2、套接字工作原理要进行网络通信,若使用C/S模式的话,只要需要一对套接字,一个是ClientSocket,一个是ServerSocket。套接字之间的连接过程服务器监听,处于等待状态,实时监控网络客户端请求,其套接字需要指出服务器端套接字的地址和端口号,然后提出连接请求连接确认,服务器收到客户端套接字的连接请求,相应,并建立新的线程。客户端收到确认,连接就建好了。服务器端的套接字继续处于监听状态。3、套接字的分类Stream(TCP)Socket提供双向、可靠、有次序、不重复的数据传送Datagram(UDP)Socket双向,但没有可靠、有次序、不重复的保证,可能收到无次序、重复的数据,也可能出现数据的丢失MFCWinSockAPICAsyncSocket类中的一些函数:Send函数intCAsyncSocket::Send(constvoid*lpBuf,intnBufLen,intnFlag=0)Receive函数intCAsyncSocket::Receive(void*lpBuf,intnBufLen,intnFlag=0)SendTo函数intCAsyncSocket::SendTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlag=0)ReceiveFrom函数intCAsyncSocket::ReceiveFrom(void*lpBuf,intnBufLen,CString&rSocketAddress,UINT&rSocketPort,intnFlag=0)设计流程一、设计对话框二、创建派生类三、对套接字类添加函数即将这些函数映射到对话框类对应的函数四、为对话框类添加控件响应函数这里添加的函数才是真正执行的函数BOOLCTALKDlg::OnInitDialog(){//初始设置套接字类型为客户机m_cmbType.SetCurSel(1);//初始为localhostm_strServName="请输入IP地址";//初始端口为8000m_nServPort=8000;UpdateData(FALSE);//更新用户界面m_sListenSocket.SetParent(this);m_sConnectSocket.SetParent(this);returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCTALKDlg::OnSendMsg(){intnLen;//消息长度intnSent;//已发送的消息长度//将在控件中输入的数据赋给相应的变量UpdateData(TRUE);if(!m_strMsg.IsEmpty()){nLen=m_strMsg.GetLength();//发送消息nSent=m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen);if(nSent!=SOCKET_ERROR){//在列表框中添加消息m_listSent.AddString(m_strMsg);//更新控件UpdateData(FALSE);}else{AfxMessageBox("信息发送错误",MB_OK|MB_ICONSTOP);}//清空当前消息m_strMsg.Empty();UpdateData(FALSE);}}voidCTALKDlg::OnReceive(){char*pBuf=newchar[1025];intnBufSize=1024;intnReceived;CStringstrReceived;//接收消息nReceived=m_sConnectSocket.Receive(pBuf,nBufSize);//判断是否接收成功if(nReceived!=SOCKET_ERROR){//保留消息的有效部分pBuf[nReceived]=NULL;//将消息转为CString对象strReceived=pBuf;//添加消息到列表框m_listReceived.AddString(strReceived);//更新控件UpdateData(FALSE);}else{AfxMessageBox(