MFC Socket 编程

来源:互联网 发布:央视电视直播软件 编辑:程序博客网 时间:2024/05/16 12:11

客户端:

1)打开VC6.0,新建工程

(图一)

2Projects——>MFC AppWizard[exe]——>Project name(给客户端取个工程名)——>OK

(图二)

3)选Dialog based——>Next

(图三)

4)注意勾选Windows Sockets——>Next——>Finsh

(图四)

5)现在就可以看到如下界面了,MFC最基本界面,自己点点右面的工具条,基本功能都能懂了。我们本次就用 三个按钮。

(图五)

6)运用那三个按钮先编出,我们需要的基本界面如下(这是个最简单的,应适当扩展)。

(图六)

7)在界面上点右键,ClassWizard,看到如下界面,在Member Variables中给成员变量命名,我们对输入框的内容命名为m_name.

(图七)

8)现在编译下,运行就能看到我们编好的对话框,可以输入内容,但是现在没有任何功能

(图八)

9)我们现在来添加功能,把运行的这个窗口关闭,回到我们的编辑页面,我们以提交按钮为例,双击提交按钮弹出

(图九)

Member function name 可改可不改,直接点击OK,然后会自动弹到按钮功能编辑的地方

(图十)

我们就在此添加按钮的功能,在此添加

UpdateData(TRUE); //更新控件值参数为FALSE,用控件值更新窗口显示

MessageBox(m_name);//弹出消息对话框

关于重置按钮的功能如法炮制,不在啰嗦。

好了,现在编译下,我们最初步的就完成了。运行看看:

(图十一)

好了,到这里编的MFC界面窗口就好了。

现在来给提交按钮添加Socket代码(这里有一些逻辑上的问题,这个应该是在服务器端,设置好以后再设置的,可以在看过服务器篇后再回过头来看,就容易理解了)。

继续进入提交按钮功能编辑的地方,加入如下代码:

CSocket socket;
 socket.Create();
 socket.Connect("192.168.18.58",6688);
 //CString strxml=_T("<login><comm>1</comm><truecode>ZA88</truecode><loginno>张三</loginno><loginpwd>123456</loginpwd></login>");
 socket.Send("this is client",1024);//发送数据
 char str[1024]={0};//如果不初始化会出现乱码问题
 socket.Receive(str,1024);//接收数据
 AfxMessageBox(str);
 socket.Close();

(图十二)

好了,这样就实现了将客户端,数据发送到服务器端的功能。

服务器端:现在我们来构架服务器端

1)再打开一个VC6.0,重复客户端1-5步,建议一个新的工程server

2)如图进入Class View

(图十三)

3)在Server classes 上点右键——>New Clsass——>Base class CSocketName取名CListenSocket——>OK;入法炮制再建立一个CRWSocket

(图十四)

   (图十五)

(图十六)

4)现在就得到图十六那样,在CServerDlg上双击进入代码编辑页,如下图加入两行代码:

5)现在双击OnInitDialog[],进入相应编辑页,找到 // TODO: Add extra initialization here 在后面加入如下代码:

m_listen.Create(8888);

m_listen.Listen();

6)分别进入我们刚才所建的两个新类CListenSocketCRWSocket中,右击——>ClassWizard,分别如下建立子类OnAccept(int nErrorCode)OnReceive(int nErrorCode)

7)双击OnAccept(int nErrorCode)进入相关编辑页面,找到// TODO: Add your specialized code here and/or call the base class在下面加入如下代码:

    CRWSocket *dataSocket;

    dataSocket=new CRWSocket;

    Accept(*dataSocket);

编译,发现好多错误,原因是没加头文件,现在加入CRWSocket的头文件#include "RWSocket.h",好了现在编译,发现全都对了。

同样的在OnReceive(int nErrorCode)里,加入如下代码:

char str[8];

Receive(str,8);//接收数据

AfxMessageBox(str);

CString comback="this is service";

Send(comback,comback.GetLength());//发送数据

8)编译下,好了,现在基本已经大功告成,运行下试试,我们先运行服务器端,在运行客户端,然后再客户端输入信息,提交,发现服务器端收到了消息。

原创粉丝点击