socket编程的基本过程(mfc socket 编程的流程是怎么样的)

2025-03-07 22:40:03 0

socket编程的基本过程(mfc socket 编程的流程是怎么样的)

本文目录

mfc socket 编程的流程是怎么样的

初始化socket首先需要调用AfxSocketInit()函数来初始化我们的socket环境。为了初始化sockets,我们需要调用AfxSocketInit()函数。它通常是在MFC中的InitInstance()函数中被调用的。如果我们用程序向导来创建socket程序的话,查看“use Windows Sockets”这个选项,然后选中它。它将会自动的为我们创建这个步骤了。(如果我们没有选中这个选项的话,我们也可以手动添加这些代码的。)这个函数的返回值显示这个函数的调用成功或失败。BOOL CServerApp::InitInstance(){....if( AfxSocketInit() == FALSE) { AfxMessageBox(“Sockets Could Not Be Initialized“); return FALSE; } ...}创建Server Sockets为了创建一个Server Socket,我们需要声明一个CAyncSocket的变量或者我们自己定制的一个从AyncSocket或是Cscket继承来的类的类型的变量。然后调用Create()函数,同时指定监听的端口。这个函数的返回值显示这个函数的调用成功或失败。UpdateData(TRUE);m_sListener.Create(m_port);if(m_sListener.Listen()==FALSE) { AfxMessageBox(“Unable to Listen on that port,please try another port“); m_sListener.Close(); return; }创建Client Sockets为了创建Client socket类,我们需要声明一个CAyncSocket的变量或者我们自己定制的一个从AyncSocket或是Cscket继承来的类的类型的变量。然后调用Create()函数,同时指定监听的端口。这个函数的返回值显示这个函数的调用成功或失败。m_sConnected.Create();m_sConnected.Connect(“server ip“,port);监听客户端的连接创建了server socket以后,我们要进行监听。调用Listen()函数。这个函数的返回值显示这个函数的调用成功或失败。if( m_sListener.Listen()== FALSE) { AfxMessageBox(“Unable to Listen on that port,please try another port“); m_sListener.Close(); return;}接受连接连接请求要被接受accept,是用另外的socket,不是正在监听的socket。请参看代码。void CXXXDlg::OnAccept(){ CString strIP; UINT port; if(m_sListener.Accept(m_sConnected)) { m_sConnected.GetSockName(strIP,port); //应该是GetPeerName,获取对方的IP和port m_status=“Client Connected,IP :“+ strIP; m_sConnected.Send(“Connected To Server“,strlen(“Connected To Server“)); UpdateData(FALSE); } else { AfxMessageBox(“Cannoot Accept Connection“); } }发送数据数据放在一个buffer中或是结构体中,调用send()函数发送。m_sConnected.Send(pBuf,iLen);接受数据调用receive()接受数据。void CXXXrDlg::OnReceive() { char *pBuf =new char ; CString strData; int iLen;iLen=m_sConnected.Receive(pBuf,1024); if(iLen == SOCKET_ERROR) { AfxMessageBox(“Could not Recieve“); } else { pBuf=NULL; strData=pBuf; m_recieveddata.Insert(m_recieveddata.GetLength(),strData); //display in server UpdateData(FALSE); m_sConnected.Send(pBuf,iLen); //send the data back to the Client delete pBuf; } }关闭连接m_sConnected.ShutDown(0); 停止发送数据m_sConnected.ShutDown(1); 停止接受数据m_sConnected.ShutDown(2); 停止发送接受数据m_sConnected.Close();编写自己的socket类在class view中选择添加一个新类,设置它的基类为CAsyncSocket,在类向导的帮助下添加如下的一些函数。class MySocket : public CAsyncSocket{ // Attributes public: // Operationspublic: MySocket(); virtual ~MySocket(); // Overrides public: void SetParentDlg(CDialog *pDlg);// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(MySocket) public: virtual void OnAccept(int nErrorCode);virtual void OnClose(int nErrorCode);virtual void OnConnect(int nErrorCode);virtual void OnOutOfBandData(int nErrorCode);virtual void OnReceive(int nErrorCode); virtual void OnSend(int nErrorCode); //}}AFX_VIRTUAL // Generated message map functions //{{AFX_MSG(MySocket) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG protected: private:CDialog * m_pDlg; };设置“Parent Dialog”调用这个socket类的SetParentDlg函数,保证当socket事件发生的时候这个窗体能接收到。m_sListener.SetParentDlg(this); m_sConnected.SetParentDlg(this);建立Socket 事件和窗体成员函数之间的联系在这个窗体类中添加一些函数,比如void OnReceive(); void OnClose(); void OnAccept(); void OnConnect()等,它们会在我们编写的的socket类中调用到。void MySocket::OnAccept(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0) { ((CServerDlg*)m_pDlg)-》OnAccept(); }CAsyncSocket::OnAccept(nErrorCode); }

请问Socket编程的基本步骤是怎样的最好能写一个简单的程序Java演示一下,主要是接受数据谢谢!

SERVER端:--------------------------------------------------------import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server extends Thread {    private Socket clientSocket;    public Server(Socket clientSocket) {        this.clientSocket = clientSocket;    }    public void run() {        DataInputStream dis = null;        DataOutputStream dos = null;        try {            dis = new DataInputStream(clientSocket.getInputStream());            dos = new DataOutputStream(clientSocket.getOutputStream());            while (true) {                String temp = dis.readUTF();                if (“over“.equals(temp)) {                    break;                }                dos.writeUTF(“from server:“ + temp);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (dis != null) {                    dis.close();                }                if (dis != null) {                    dos.close();                }                if (clientSocket != null) {                    clientSocket.close();                }            } catch (IOException e) {            }        }    }    public static void main(String args) throws Exception {        ServerSocket ss = new ServerSocket(8008);        while (true) {            Socket clientSocket = ss.accept();            // 针对每个客户端, 启一个Server线程专门处理此客户端的请求。            Server server = new Server(clientSocket);            server.start();        }    }}CLIENT端:----------------------------------------import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.Socket;public class Client {    public static void main(String args) throws Exception {        // 输入流1, 从键盘进入Client。        InputStreamReader isr = new InputStreamReader(System.in);        BufferedReader br = new BufferedReader(isr);        Socket clientSocket = new Socket(“127.0.0.1“, 8008);        // 输入流2, 从服务器端进入Client的流对象。        DataInputStream dis = new DataInputStream(clientSocket.getInputStream());        // 输出流, 从Client出去, 到服务器端。        DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream());        while (true) {            // 从键盘输入读取            String msg = br.readLine();            // 将读取信息发送给服务器端            dos.writeUTF(msg);            //输入QUIT退出            if (“QUIT“.equals(msg)) {                break;            }            //读取从服务器返回的信息            String temp = dis.readUTF();            System.out.println(temp);        }        br.close();        dis.close();        dos.close();        clientSocket.close();    }}

SOCKET编程实现服务器端的步骤是什么

Java版本1.编写服务器端,实例化ServerSocket对象,这里要定义ip和端口,实例化Socket,从ServerSocket对象中accept() 获取,这里要涉及到流,输入输出流在Socket中获取2.编写客户端,实例化Socket对象,ip,端口,流,在Socket中获取如果想要具体代码,就留言,有空发给你

socket编程的基本过程(mfc socket 编程的流程是怎么样的)

本文编辑:admin

更多文章:


网上课程哪个平台比较好(现在哪一个网络教育平台最好)

网上课程哪个平台比较好(现在哪一个网络教育平台最好)

本文目录现在哪一个网络教育平台最好我想在网上教学,哪个网上教学平台好小学网课平台哪个好学而思、新东方、猿辅导、天天练、小学宝、纳米盒子线上授课平台选哪个比较好网课哪个平台比较好现在哪一个网络教育平台最好网上教育平台好的标准:一、师资力量;二

2025年2月21日 04:30

沉默的羔羊原型(电影《沉默的羔羊》《华尔街》所使用的原型是 A.阿喀琉斯 B.康迪德 C.浮士德 D.俄耳浦斯)

沉默的羔羊原型(电影《沉默的羔羊》《华尔街》所使用的原型是 A.阿喀琉斯 B.康迪德 C.浮士德 D.俄耳浦斯)

本文目录电影《沉默的羔羊》《华尔街》所使用的原型是 A.阿喀琉斯 B.康迪德 C.浮士德 D.俄耳浦斯沉默的羔羊里面的事情是真实的么这些人物都存在么原型都是谁有没有独特的分析 ,不要在网上转载!沉默的羔羊的原型——泰德·邦迪,你怎么看呢电影

2025年4月1日 23:40

打开这个网站你会感谢我的(我打开有些网页就会出现“此网站需要运行以下加载项如果您信任请点击这里”)

打开这个网站你会感谢我的(我打开有些网页就会出现“此网站需要运行以下加载项如果您信任请点击这里”)

本文目录我打开有些网页就会出现“此网站需要运行以下加载项如果您信任请点击这里”为什么我在美国上中国网页打不开谁帮我解决一下 我非常感谢啊为什么我的电脑主页打不开 其他的网站都能开,QQ也能上 如果您能回答我会很感激谁可以帮我把这个网站的加密

2025年2月21日 15:30

java编程如何入门(新手如何学好java编程)

java编程如何入门(新手如何学好java编程)

本文目录新手如何学好java编程java初学者,应该如何学习java呢新手如何学好java编程首先初学者学习Java,应该从最基础的开始 :但是在学习的时候不要图快,要系统的学习一下,或者在了解Java这一门语言是干什么,有什么作用之后,在

2025年3月23日 00:10

colormap(matlab中“colormap(map) map”为什么没被定义)

colormap(matlab中“colormap(map) map”为什么没被定义)

本文目录matlab中“colormap(map) map”为什么没被定义MATLAB中colormap(gray)什么意思 dirac函数怎么用matlab中“colormap(map) map”为什么没被定义1、colormap函数:获

2025年3月14日 20:00

teenagers怎么读(teenager怎么读)

teenagers怎么读(teenager怎么读)

本文目录teenager怎么读teenagers’ 复数的所有格 读音是怎样的父母的英语单词怎么读句中的“Teenagers”什么意思,怎么读teenager怎么读teenager: n. 13岁到19岁的年轻人例句与用法: 1. It

2025年4月2日 21:40

energy什么意思中文(energy什么意思)

energy什么意思中文(energy什么意思)

本文目录energy什么意思energy是什么意思作为形容词energy是什么意思energy什么意思energy意思是精力。一、含义n. 精力;活力;能源。 二、用法energy的基本意思是“活力”“干劲”“能力”,多用作不可数名词,在指

2025年2月22日 02:40

linux命令行界面(linux为什么开机就是命令行界面)

linux命令行界面(linux为什么开机就是命令行界面)

本文目录linux为什么开机就是命令行界面Linux 中进入命令行界面有哪些方式linux怎么切换到命令行界面linux如何退出命令操作界面在linux中,命令界面转换成操作界面linux为什么开机就是命令行界面那是因为你没有安装图形界面再

2025年2月23日 07:30

什么是“网络钓鱼”?网络钓鱼、钓鱼网站是什么意思啊

什么是“网络钓鱼”?网络钓鱼、钓鱼网站是什么意思啊

本文目录什么是“网络钓鱼”网络钓鱼、钓鱼网站是什么意思啊网络钓鱼是什么什么是“网络钓鱼”网络钓鱼(Phishing‎,与钓鱼的英语fishing‎发音相近,又名钓鱼法或钓鱼式攻击)是通过大量发送声称来自于银行或其他知名机构的欺骗性垃圾邮件,

2025年2月20日 05:30

sqlyog(sqlyog怎么导出sql文件)

sqlyog(sqlyog怎么导出sql文件)

本文目录sqlyog怎么导出sql文件如何用sqlyog修改mysql数据库的密码sqlyog中怎么导入sql文件sqlyog错误代码1045求一份sqlyog中文破解版sqlyog可以对数据库进行哪些操作sqlyog怎么导出sql文件【打

2025年2月13日 01:10

ipv6查询(如何查看自己的手机连接网络是不是IPv6协议)

ipv6查询(如何查看自己的手机连接网络是不是IPv6协议)

本文目录如何查看自己的手机连接网络是不是IPv6协议怎样查到某网址对应的IPv6地址怎么看ipv6 地址如何查询手机是否支持ipv6如何查询一个域名的IPV6地址路由器的IPV6地址苹果手机怎么看ipv6地址如何查看自己的手机连接网络是不是

2025年3月12日 08:50

mobile number是什么意思(mobile可以组成什么单词)

mobile number是什么意思(mobile可以组成什么单词)

本文目录mobile可以组成什么单词mobile number是什么意思cell phone number和mobile phone number有区别吗mobile可以组成什么单词mobile组成的单词是mobile.mobile单词发音

2025年3月6日 00:00

dreamweaver 教程(如何使用Dreamweaver方便快捷编辑网页标签_Dreamweaver教程)

dreamweaver 教程(如何使用Dreamweaver方便快捷编辑网页标签_Dreamweaver教程)

本文目录如何使用Dreamweaver方便快捷编辑网页标签_Dreamweaver教程怎么用dreamweaverDreamweaver网页制作教程的介绍dreamweaver 怎么用如何使用Dreamweaver方便快捷编辑网页标签_Dr

2025年3月21日 23:50

一次函数练习题(初二孩子一次函数总是容易出错,是什么原因)

一次函数练习题(初二孩子一次函数总是容易出错,是什么原因)

本文目录初二孩子一次函数总是容易出错,是什么原因一次函数有什么解答技巧初二孩子一次函数总是容易出错,是什么原因感觉函数题挺简单的,画图象一般是列表,描点,连线函数有X,Y坐标轴,有4个象限XY都为正是第一象限X负Y正为第二象限XY都为负是第

2025年2月15日 01:20

radiobutton控件默认选中(winform怎么rediobutton被默认选中)

radiobutton控件默认选中(winform怎么rediobutton被默认选中)

本文目录winform怎么rediobutton被默认选中MFC radio button如何默认选中jsp radiobutton 默认选中第一个怎样设置radiobutton的默认值winform怎么rediobutton被默认选中假设

2025年3月12日 06:40

sql怎么删除索引(sql如何建立降序索引 和删除索引)

sql怎么删除索引(sql如何建立降序索引 和删除索引)

本文目录sql如何建立降序索引 和删除索引如何通过SQL创建删除表的索引删除excel中的sql索引怎么在数据库中删除已经添加的某个索引Sqlserver2008删除索引问题删除索引的sql语句是(sql如何建立降序索引 和删除索引建立降序

2025年4月4日 19:30

防火墙的作用包括(防火墙的主要作用是)

防火墙的作用包括(防火墙的主要作用是)

本文目录防火墙的主要作用是防火墙的主要功能是什么防火墙的主要功能和几种类型防火墙的主要作用是防火墙的主要功能有:(1)网络安全的屏障防火墙可通过过滤不安全的服务而减低风险,极大地提高内部网络的安全性。由于只有经过选择并授权允许的应用协议才能

2025年3月30日 03:20

js string(在js中string 怎么转换)

js string(在js中string 怎么转换)

本文目录在js中string 怎么转换怎样给js中的string方法再创建一个方法在JS中String 和string什么区别JS中String类型转换Date类型JS中的String字符串类型是基础数据类型吗js怎么判断一个对象是 str

2025年4月3日 05:50

crossing field(刀剑神域2主题曲《crossing field》中文意思是什么)

crossing field(刀剑神域2主题曲《crossing field》中文意思是什么)

本文目录刀剑神域2主题曲《crossing field》中文意思是什么求刀剑神域OP【crossing field】的罗马音歌词刀剑神域2主题曲《crossing field》中文意思是什么现在就毫不迷惘的迷わずに今在这充满矛盾的世界矛盾だ

2025年3月28日 01:50

php培训费用(达内培训java学费多少)

php培训费用(达内培训java学费多少)

本文目录达内培训java学费多少去外面的计算机培训公司培训三个月能不能学会php达内培训java学费多少达内所谓的平安就业险其实就是交钱学习后,跟项目经理关系好,就可以推荐到达内就业。而里面的项目经理其实很多都是这样在达内培训后留下来的学员

2025年3月7日 01:00

近期文章

upload(upload的意思)
2025-04-05 11:40:02
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索