socket编程的基本过程(SOCKET编程实现服务器端的步骤是什么)
本文目录
SOCKET编程实现服务器端的步骤是什么
Java版本1.编写服务器端,实例化ServerSocket对象,这里要定义ip和端口,实例化Socket,从ServerSocket对象中accept() 获取,这里要涉及到流,输入输出流在Socket中获取2.编写客户端,实例化Socket对象,ip,端口,流,在Socket中获取如果想要具体代码,就留言,有空发给你
请问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(); }}
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); }
更多文章:
mysql怎么样(mysql社区版的稳定性与可靠性如何,是否有必要用oracle)
2024年6月21日 08:20
lesson one(lessonone维生素产品有质量问吗)
2024年7月31日 14:01
bootstrap4 网站后台模板(如何利用bootstrap框架开发后台)
2024年5月8日 16:28
网络代理ip地址和端口(什么叫代理服务器的ip地址,什么叫服务器的端口.)
2024年4月3日 06:01
goto官网(请高手帮忙鉴定一下该网站真伪,多谢了 http://www.gotoread.com)
2024年8月24日 00:00
c语言指针数组举例(谁发点C语言例子给我,关于数组和指针的)
2024年7月3日 14:03
personality traits(personality traits是什么意思)
2024年7月12日 06:08
cellspacing属性的作用(表格cellspacing属性)
2024年7月23日 22:16
button按钮属性(PYTHON3.7.2 button 修改属性)
2024年8月9日 17:35
python单继承和多继承(Python中的面向对象(高级)之私有方法、多继承、多态)
2024年9月28日 14:05