VC2005—Socket(TCP/IP)服务端一步一步详细教程
来源:互联网 发布:济南东站到济南站源码 编辑:程序博客网 时间:2024/06/02 13:26
第一步:新建一个项目,项目类型为MFC,名称为:TCPServer。选择基于对话框,并且选择Windows套接字。然后直接点完成就OK。
第二步:设计对话框,添加接收数据的编辑框,以及设置端口的编辑框,设置端口的按钮,清除接收数据的编辑框功能的按钮,以及退出按钮。
IDC_PORT_SET 设置端口 重新设置端口
IDC_CLEAR_IN 清除 清除编辑框中的内容
IDCANCEL 关闭 关闭对话框
IDC_IN_INFO 接收框 接收客户端发送过来的数据
IDC_PORT_EDIT 设置框 端口设置框
第三步:添加类
添加一个新类CClientSocket
说明:此类用于服务器对当前Socket的连接操作。
选择“项目”-->“添加类”-->类别选择“MFC”-->模板选择“MFC类”-->基类选择“CSocket”
方法同上添加新类ClistenSocket
说明:此类用于当服务器面临多个连接时建立Socket连接队列。
第四步:添加及修改代码
修改CClientSocket类
重载基类函数OnReceive,使用此函数接收Socket连接另一端发送的消息,修改程序的代码如下所示
void CClientSocket::OnReceive(int nErrorCode){// TODO: 在此添加专用代码和/或调用基类 ((CTCPServerDlg*)(AfxGetApp()->m_pMainWnd))->GetSocketMsg(this);CSocket::OnReceive(nErrorCode);}
上面代码的作用是当有信息发送到时,调用主对话框类的GetSocketMsg函数进行信息的接收,由于用到类CTCPServerDlg,所以在文件ClientSocket.cpp首部加入如下头文件
<pre name="code" class="cpp">//ADD#include"TCPServerDlg.h"//ADD
重载过程如下:首先选择类视图选中CClientSocket类
修改ClistenSocket
重载基类函数OnAccept,并修改如下:
void CListenSocket::OnAccept(int nErrorCode){ CClientSocket* pSocket=new CClientSocket(); //声明一个ClientSocket实例CTCPServerDlg* pMainWnd=((CTCPServerDlg*)(AfxGetApp()->m_pMainWnd ));//如果开始接收Socket传来的数据if(pMainWnd->m_pSocket->Accept(*pSocket)){pMainWnd->m_SocketList.AddTail(pSocket);//添加消息来源pMainWnd->MessageBox(_T("监听到一个连接,服务器程序"));}else delete pSocket;//否则删除该消息来源CSocket::OnAccept(nErrorCode);}//代码的作用是当有与该端口试图连接的Socket时,调用主对话框类的GetSocketMsg函数进行信息的接收//代码解释:AfxGetApp()->m_pMainWnd获取主对话框指针//AfxGetApp( )这个函数是全局函数,可以得到当前应用进程的指针
//ADD#include "TCPServerDlg.h"//函数检验连接,并将其加入到程序维护的Socket连接队列中,由于用到类CServerSocketDlg#include "ClientSocket.h"//CClientSocket,因此在文件ListenSocket.cpp首部加入//ADD
修改CTCPServerDlg类
添加编辑框的变量
添加端口编辑框
在TCPServerDlg.h中添加如下定义
public:void GetSocketMsg(CClientSocket* pSocket);CPtrList m_SocketList;CListenSocket* m_pSocket;在TCPServerDlg.h和TCPServerDlg.cpp首部添加如下头文件
#include "ListenSocket.h"#include "ClientSocket.h"
首先双击端口设置按钮后在TCPServerDlg.cpp中添加如下代码
void CTCPServerDlg::OnBnClickedPortSet(){// TODO: 在此添加控件通知处理程序代码m_pSocket=new CListenSocket; UpdateData(TRUE);if(m_pSocket->Create(m_PortSet)){if(!m_pSocket->Listen())MessageBox(_T("端口设置错误,服务器程序"));else MessageBox(_T("端口设置生效,服务器程序"));}}
双击清除按钮然后添加
void CTCPServerDlg::OnBnClickedClearIn(){// TODO: 在此添加控件通知处理程序代码m_InInfo.Empty ();UpdateData(FALSE);}
双击退出按钮然后添加
void CTCPServerDlg::OnBnClickedCancel(){// TODO: 在此添加控件通知处理程序代码if(m_pSocket) delete m_pSocket; m_SocketList.RemoveAll();OnCancel();}
最后直接粘贴如下代码
void CTCPServerDlg::GetSocketMsg(CClientSocket* pSocket){BOOL MsgEnd=FALSE;CString Msg;char MsgBuf[100];int bufsize=100;Msg.Empty();do{strcpy(MsgBuf,"");int left=pSocket->Receive(MsgBuf,bufsize);if(left<100 && left>0) MsgEnd=TRUE;MsgBuf[left]=0;Msg+=MsgBuf;}while(!MsgEnd);MessageBox(_T("接收到客户端信息"),_T("服务器程序"));m_InInfo+=Msg;UpdateData(FALSE);}
0 0
- VC2005—Socket(TCP/IP)服务端一步一步详细教程
- socket(TCP)服务端程序
- Socket(Tcp)通信服务端
- socket实现tcp/ip服务端源码,无线程
- unix - tcp/ip服务端..
- socket编程—TCP/IP
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- 【Java TCP/IP Socket】TCP Socket(含代码)
- Socket tcp服务端 代码示例
- 开源库源代码构建的一般方式(CEGUI举例)
- Swift
- ZOJ-1164
- ARP地址解析协议
- 地下十八层的宣言
- VC2005—Socket(TCP/IP)服务端一步一步详细教程
- 二进制文件的存储关系
- 腾讯webqq最新密码加密算法,hash算法
- MSP430软件DDS
- 关于TCP/IP和HTTP之间的关系,你知道吗?
- Eclipse下的java工程目录
- STL算法常用算法
- ANSI C语言总结
- C# 自定义事件