【MFC】利用CSOCKET实现连接、简单通信

首先,必须说一下SOCKET连接的理论步骤:
1、在服务器端声明一个用于监听客户端的SOCKET对象,同时对应某个端口设定为监听状态;
2、在客户端声明SOCKET对象,并通过IP和端口向服务器请求连接;
3、服务器端监听到请求指令后,新建一个SOCKET对象,用于与客户端绑定,传送和接收数据,服务器用于监听的SOCKET继续监听下一个客户端的请求。

接下来,我们开始正式着手:
1、服务器端的建立
我们先新建一个Server项目(MFC应用程序,基于对话框,Windows套接字 打上勾),然后我们 项目-添加类-MFC类,添加一个基于CSocket的子类CListen,点击完成。这个类我们用于监听。
接下来,我们需要像添加CListen类一样,添加一个CRecv类,该类用于绑定客户端,实现文件的传输。
现在,我们在CListen的头文件中添加#include "Recv.h",并且声明一个指向CRecv类对象的指针,如CRecv *recv。接下来呢,我们在类视图中点中CListen类,点属性-重写-OnAccept。在OnAccept函数中,我们添加以下代码:
recv = new CRecv();
Accept(*recv);

这段代码的作用是在当服务器监听到客户端的连接请求时,新建一个CRecv的成员,并用它来接受客户端的连接请求,也就是用它与客户端绑定。
这样,我们CListen类就已经写完了,接下来我们去完成CRecv类,同样,我们在类视图中点中CRecv类,点属性-重写-OnReceive。在OnReceive函数中,我们添加以下代码:
char str[100];
Receive(str,100);
CString strtest;  
strtest=str; 
AfxMessageBox(strtest);

这段代码用于接收客户端发送过来的字符串,然后以MessageBox的形式显示出来。
最后,在主对话框的头文件中添加#include "Listen.h" ,并且声明一个CListen变量 m_listen 。然后,在主对话框的OnInitDialog函数中,添加如下代码:
m_listen.Create(8888);    //8888表示的是我们要监听的端口
 
m_listen.Listen();

如此一来,服务器的事情我们已经完成了。

2、客户端的建立
相比于服务器,客户端就简单多了,因为它只需要一个SOCKET。
我们先新建一个Client项目(MFC应用程序,基于对话框,Windows套接字 打上勾),然后我们 项目-添加类-MFC类,添加一个基于CSocket的子类CMySocket,点击完成。这个类我们用于和客户端的连接和收发数据。
然后,在主对话框的头文件中添加#include "MySocket.h",并且声明一个CMySocket类对象,如CMySocket  m_mySocket;接着,我们得再主对话框的OnInitDialog函数中添加
m_mySocket.Creat();//初始化SOCKET

这时候,我们可以为主对话框添加一个按钮,caption设为“连接”,用于连接。双击这个按钮,开始函数定义,在函数体中我们加入以下代码:
m_mySocket.Connect(_T("127.0.0.1 "),8888);
第一个参数表示想要连接的服务器的IP,第二个参数表示端口。
现在,客户端与服务器的连接工作已经做好了,我们需要再在客户端的主对话框中添加一个按钮,caption设为“发送”,用于发送信息,在改按钮的函数中,我们添加以下代码:
m_mySocket.Send("客户端发来了信息 ",100);//参数分别表示要发送的字符串和字符串的最大长度

这下,大功告成了,先运行服务器,然后运行客户端,点击客户端的“连接”按钮,接着点击“发送”,看服务器窗口,弹出了MessageBox,“客户端发来了信息”。

*在上面的例子中,我们只是客户端向服务器单向发送数据,如果想要双向发送数据,那么只需像服务器一样在客户端的CMySocket类重写一个OnReceive函数,并且在服务器添加一个用于发送的按钮就可以了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值