zoukankan      html  css  js  c++  java
  • 客户端网络编程和服务器网络编程的步骤

    客户端(client)是指网络编程中首先发起连接的程序,一般用于实现程序界面和基本逻辑。在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式如何,客户端的编程都是主要由3个步骤实现:

    (1)建立网络连接

           客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。

    (2)交换数据

          交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个相应数据给客户端,如果客户端不发送请求,服务器就不响应。

    (3)关闭网络连接

           在数据交换完以后,关闭网络连接,释放程序占有的端口、内存等系统资源,结束网络编程。

    这是最基本的步骤,在实际实现时,步骤(2)会重复出现,在进行代码组织时,由于网络编程是比较耗时的操作,所以一般开启专门的现场进行网络通信。

      

    服务器端(server)是指在网络编程中被动等待连接的程序,一般用于实现程序的核心逻辑以及数据储存等核心功能。服务器端的编程步骤和客户端不同,由4个步骤实现,依次是:

    (1)监听端口

           服务器属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口及时服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。

    (2)获得连接 

    (3)交换数据

           服务器端的数据交换步骤是首先接受客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单就是说,先接收再发送,这和客户端的数据交换顺序不同。

    (4)关闭连接

    简单的客户端网络编程和服务端网络编程:

    客户端

    package tcp;
    import java.io.*;
    import java.net.*;
    /**
     * 简单的Soket客户端
     *功能为:发送字符串"Hello"到服务器端,并打印出服务器的反馈
     */
    public class SimpleSocketClient {
     public static void main(String[] args){
      Socket s = null;
      InputStream is = null;
      OutputStream os = null;
      //服务器IP地址
      String serverIP = "127.0.0.1";
      //服务器端端口号
      int port = 10000;
      //发送内容
      String data = "Hello";
      try{
       //建立连接
       s = new Socket(serverIP,port);
       //发送数据
       os = s.getOutputStream();
       os.write(data.getBytes());
       //接收数据
       is = s.getInputStream();
       byte[] b = new byte[1024];
       int n = is.read(b);
       //输出反馈数据
       System.out.println("服务器反馈:"+new String(b,0,n));
       
      }catch(Exception e){
       e.printStackTrace();
      }finally{
       try{
        //关闭流和连接
        is.close();
        os.close();
        s.close();
       }catch(Exception e2){
        
       }
      }
     }

    }

    服务器端

    * *echo服务器
     * 功能:将客户端发送的内容反馈给客户端
    */
    public class SimpleSocketServer {
     public static void main(String[] args){
      ServerSocket ss = null;
      Socket s = null;
      InputStream is = null;
      OutputStream os = null;
      int port = 10000;
      try{
       //建立连接
       ss = new ServerSocket(port);
       //获得连接
       s = ss.accept();
         //接收客户端发送内容
       is = s.getInputStream();
       byte[] b = new byte[1024];
       int n = is.read(b);
       //输出
       System.out.println("客户端发送内容为:"+new String(b,0,n));
       //向客户端发送反馈内容
       os = s.getOutputStream();
       os.write(b,0,n);
       
      }catch (Exception e){
       e.printStackTrace();
      }finally{
       try{
        //关闭流和连接
        os.close();
        is.close();
        s.close();
        ss.close();
       }catch(Exception e){
        
       }
      }
      
     }

    }

    复用的客户端网络编程和服务器端网络编程

    客户端

    package tcp;

    import java.io.*;
    import java.net.*;
    /**
     * 复用连接的Soket客户端
     *功能为:发送字符串"Hello"到服务器端,并打印出服务器的反馈
     */
    public class MulSocketClient {
     public static void main(String[] args){
      Socket s = null;
      InputStream is = null;
      OutputStream os = null;
      //服务器IP地址
      String serverIP = "127.0.0.1";
      //服务器端端口号
      int port = 10000;
      //发送内容
      String data [] = {"First","Second","Third"};
      
      try{
       //建立连接
       s = new Socket(serverIP,port);
       //初始化流
       os = s.getOutputStream();
       is = s.getInputStream();
       byte[] b = new byte[1024];
       for(int i = 0;i<data.length;i++){
        //发送数据
        os.write(data[i].getBytes());
        int n = is.read(b);
        //输出反馈数据
        System.out.println("服务器反馈:" + new String(b,0,n));
       }
       
      }catch(Exception e){
       e.printStackTrace();
      }finally{
       try{
        //关闭流和连接
        is.close();
        os.close();
        s.close();
       }catch(Exception e2){
        
       }
      }
     }

    }

    服务器端

    package tcp;
    import java.io.*;
    import java.net.*;
    /**
     *复用连接的echo服务器
     *功能:将客户端发送的内容反馈给客户端
     */
    public class MulSocketServer {
     public static void main(String[] args){
      InputStream is = null;
      OutputStream os = null;
      Socket s = null;
      ServerSocket ss = null;
      //监听端口号
      int port = 10000;
      try{
      //建立连接
       ss = new ServerSocket(port);
       System.out.println("服务器已启动");
      //获得连接
       s = ss.accept();
       is = s.getInputStream();
       os = s.getOutputStream();
       byte[] b = new byte[1024];
       for(int i = 0; i<3;i++){
        int n = is.read(b);
        System.out.println("客户端发送内容为:"+new String(b,0,n));
      //向客户端反馈内容
        os.write(b,0,n);
       }
      }catch (Exception e){
       e.printStackTrace();
      }finally{
       try{
      //关闭流和连接
       is.close();
       os.close();
       s.close();
       ss.close();
      }catch(Exception e){
       
      }
       
      
     }
     
     
     }
    }

  • 相关阅读:
    Maven学习
    Android屏幕适配
    Java多线程中的死锁问题[转]
    数据结构基本概念和算法分析
    AsyncTask(异步任务)
    Android自定义滑动开关按钮
    记录一些我记不住的技术
    2017携程Web前端实习生招聘笔试题总结
    JavaScript ES5面向对象实现一个todolist
    原生JavaScript实现一个简单的todo-list
  • 原文地址:https://www.cnblogs.com/belingzhong/p/2477116.html
Copyright © 2011-2022 走看看