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中获取如果想要具体代码,就留言,有空发给你
更多文章:

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

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

colormap(matlab中“colormap(map) map”为什么没被定义)
2025年3月14日 20:00

ipv6查询(如何查看自己的手机连接网络是不是IPv6协议)
2025年3月12日 08:50

mobile number是什么意思(mobile可以组成什么单词)
2025年3月6日 00:00

dreamweaver 教程(如何使用Dreamweaver方便快捷编辑网页标签_Dreamweaver教程)
2025年3月21日 23:50

radiobutton控件默认选中(winform怎么rediobutton被默认选中)
2025年3月12日 06:40

crossing field(刀剑神域2主题曲《crossing field》中文意思是什么)
2025年3月28日 01:50