欢迎来到天天文库
浏览记录
ID:14789816
大小:133.00 KB
页数:12页
时间:2018-07-30
《计算机网络通信设计课程设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows环境下TCP/IP数据传输程序的基本运行步骤和编程方法在编此程序时,我们首先创造了一个支持WindowsSocket功能的基类,在此基础上我们又添加了一个继承的基类为CSocket的新类,CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类,内支持TCP/IP传输的OnAccept,OnReceive,Onclose等函数。因为在进行TCP/IP通讯时,我们需要用到以上函数调用,所以添加了此子类。voidCFirstDlg::OnNew(){if(m_nType==0){UpdateData(TRUE);BOOLbRet=m_Soc
2、ket.Create(m_nPortNumber);if(!bRet){MessageBox("创建连接失败!");return;}MessageBox("创建连接成功!");m_Socket.Listen();}else{BOOLbRet=m_Socket.Create();UpdateData(TRUE);CStringstr;unsignedcharipAdress1,ipAdress2,ipAdress3,ipAdress4;m_IPAddress.GetAddress(ipAdress1,ipAdress2,ipAdress3,ipAdress4);str.Format("%
3、d.%d.%d.%d",ipAdress1,ipAdress2,ipAdress3,ipAdress4);if(!m_Socket.Connect(str,m_nPortNumber)){MessageBox("连接服务器失败!");return;}MessageBox("连接服务器成功!");CWnd*pWnd=GetDlgItem(IDC_New);pWnd->EnableWindow(FALSE);pWnd=GetDlgItem(IDC_Link);pWnd->EnableWindow(TRUE);}}首先,作为服务器首先要开放端口,而作为客户机而要呼叫相应端口建立连接,m_nT
4、ype的值代表了程序作为客户机还是服务器,若m_nType=0,代表服务器,m_nType=1代表客户机,若为服务器则m_Socket.Create(m_nPortNumber)利用m_nPortNumber的端口号创建套接字,如果成功则调用m_Socket.Listen()进行监听,若为客户机则先调用m_Socket.Create()创建一个套接字,然后调用m_Socket.Connect(str,m_nPortNumber)对相应的ip地址和端口号进行连接。voidNewSocket::OnAccept(intnErrorCode){//TODO:Addyourspecialize
5、dcodehereand/orcallthebaseclassCSocket::OnAccept(nErrorCode);NewSocket*pSocket=newNewSocket;if(Accept(*pSocket)){m_pMyDlg->m_pNewSocket=pSocket;pSocket->m_pMyDlg=m_pMyDlg;}elsedeletepSocket;}在客户机对服务器进行呼叫连接时,若服务器已处于监听状态,收到客户机连接请求时,则产生消息调用OnAccept();OnAccept()中新定义一个NewSocket类pSocket指针用来指向新建立的连接,并将
6、地址赋予m_pNewSocket,用于接下来的处理。voidCFirstDlg::OnSendData(){NewSocket*pSocket;if(m_pNewSocket)pSocket=m_pNewSocket;elsepSocket=&m_Socket;charData[100];UpdateData(TRUE);strcpy(Data,m_DataSend);pSocket->Send(Data,strlen(Data));}此时,服务器与客户机之间已经建立了TCP/IP连接,接下来服务器或客户机就要向对方发送数据,由于建立连接时使用的是m_Socket变量,而在客户机呼叫服
7、务器进行连接时,服务器将m_pNewSocket指针指向新建立的连接,而原服务器m_Socket变量并没有指向新的连接,而是仍然处于监听状态。因此,此时服务器新连接的NewSocket的指针为m_pNewSocket,客户机的新连接的NewSocket的指针为&m_Socket,然后pSocket->Send(Data,strlen(Data))语句调用NewSocket内部的Send语句向对方发送指令。voidNewSocket::OnRec
此文档下载收益归作者所有