• TCP通信 -C/S中的Socket与ServerSocket


    客户端类:Socket类


    • TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器的数据,两次IO流

    • java.lang.Object
      继承者 java.net.Socket

    • 构造方法:

      1. Socket(String host, int port)
        创建一个流套接字并将其连接到指定主机上的指定端口号。
        参数:
        String host:服务器主机名/IP地址
        int port:服务器的端口号
    • 成员方法:

      1. OutputStream getOutputStream()
        返回此套接字的输出流。
      2. InputStream getInputStream()
        返回此套接字的输入流。
      3. void close()
        关闭套接字
    • 注意:

      1. 客户端和服务器端交互时,必须使用Socket中提供得网络流,不能使用自己创建的流对象
      2. 当我们创建客户端Socket对象时,就会使用TCP协议与服务器建立连接通路,若服务器没有启动,就会抛出异常。

    服务器类:ServerSocket类


    • TCP通信的服务器端:接受客户端的请求,读取客户端发送的数据,给客户端回写数据,两次IO流,一直处于等待状态

    • java.lang.Object
      继承者 java.net.ServerSocket

    • 构造方法:

      1. ServerSocket(int port)
        创建绑定到特定端口的服务器套接字,不设置操作系统随机分配,无法通信。
    • 成员方法

      1. Socket accept()
        侦听并接受到此套接字的连接。
    • 注意: 服务器端必须明确一件事,必须知道是哪个客户端请求的服务器,所以可以使用accept()方法获取到请求的客户端对象Socket


    package cn.learn.web;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class client {
        public static void main(String[] args) throws IOException {
            //1.创建客户端对象Socket,构造方法绑定服务器IP地址和端口号
            Socket socket = new Socket("127.0.0.1",8020);
            //2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
            OutputStream outputStream = socket.getOutputStream();
            //3.使用流中的write方法给服务器发送数据,需要转换成字节数组
            outputStream.write("服务器你好".getBytes());
    
            //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
            InputStream clientIn = socket.getInputStream();
            //5.使用InputStream对象中的read()方法,读取服务器回写的数据
            byte[] bytes = new byte[1024];
            int len =clientIn.read(bytes);
            //打印看看
            System.out.println(new String(bytes,0,len));
    
            //6.释放资源,只关闭Socket的IO流就行
            socket.close();
    
        }
    }
    
    

    package cn.learn.web;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static void main(String[] args) throws IOException {
    
            //1.设置通信端口号,不然系统随机分配
            ServerSocket server = new ServerSocket(8020);
    
            //2.使用serverSocket对象中的方法accept,获取到请求的客户端对象Socket(含地址和端口号)
            Socket socket1 = server.accept();
    
            //3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
            InputStream serveIn = socket1.getInputStream();
    
            //4.使用serveIn的方法read,读取客户端发送的数据
            byte[] bytes = new byte[1024];
            //获取读取的数据有效长度
            int len = serveIn.read(bytes);
            //打印看看
            System.out.println(new String(bytes,0,len));
    
            //5.使用Socket对象中的方法getOutputStream()获取网络字节输入流OutputStream对象
            OutputStream serverOut = socket1.getOutputStream();
    
            //6.使用serverOut中的write方法回写给客户端
            serverOut.write("我收到了".getBytes());
    
            //7.释放socket1与server的流
            server.close();
            socket1.close();
        }
    }
    
    
  • 相关阅读:
    端午节习俗
    彩绘漂亮MM集
    高效使用数码相机的诀窍
    项目管理缩略语
    数码相机如何当做摄像头(文字版)
    标签式按纽
    显示一个Form中的所有内容
    生活中要常常鼓励别人
    青苹果论坛重新开放
    第一次爱的人
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/11610095.html
Copyright © 2020-2023  润新知