MFC利用Socket实现连接

MFC利用CString实现连接

首先,必须说一下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变量 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函数,并且在服务器添加一个用于发送的按钮就可以了。


 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值