欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TCP通信

程序员文章站 2022-06-05 22:02:35
...

客户端-Socket类

/*俩端通信时步骤:
1.服务端程序,需要先启动等待客户端的连接
2.客户端主动连接服务端,连接成功才能通信。服务端不可以主动连接客户端。
TCP协议–面向连接的通信协议,在传输数据前先在发送端和接收端建立逻辑连接,
然后再传输数据,它提供了俩台计算机之间可靠毫无差错的数据传输
–每次连接的创建都要经过“三次握手”,(请求、响应、确认),保证了传输数据安全性
在Java中,提供了俩个类用于实现TCP通信程序:
1.客户端:java.net.Socket类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,俩者建立连接开始通信。
2.服务端:java.net.ServerSocket类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。
*

  • 类Socket,此类实现客户端套接字(也可以叫“【套接字】”,套接字表示俩台机器间通信的端点)
    
  • 套接字=IP地址+端口号
    
  • 作用:源计算机通过IP地址找到了目标计算机,而再通过端口号就可以找到目标计算机里的具体一个应用程序
    
  • 分析?
    

    客户端通过[IP地址]找到服务端,客户端通过[端口号]找到应用程序
    所以
    客户端Socket类里要用构造方法俩个参数里要带有IP地址、端口号
    构造方法:Socket(String host ,int port)创建一个套接字—连接到指定目标主机上的指定端口号
    参数:
    String host:服务器主机的名称/服务器的IP地址
    int port: 服务器的端口号
    客户端与服务器端之间进行交互—使用流(字节流)
    那么咋样获取流呢?
    —使用Socket类中的成员方法getOutputStream();—获取到字节输出流OutputStream对象
    —使用Socket类中的成员方法getInputStream();—获取字节输入流InputStream对象
    那么流使用完要释放资源?
    —使用Socket类中的成员方法close()—关闭套接字

============================================================================================
*

   客户端实现步骤:
*         1.创建客户端对象Socket,构造方法中绑定(IP地址,端口号)
*         2.使用使用Socket类中的成员方法getOutputStream();---获取到字节输出流OutputStream对象
*          2.1再使用网络字节输出流OutputStream对象中的方法write();---给服务器发送数据
*         3.使用Socket类中的成员方法getInputStream();---获取字节输入流InputStream对象
*          3.1在使用网络字节输入流InputStream对象中的方法read();--- 读取服务端回写的数据
*         4.释放资源(Socket)
    注意:
*     客户端与服务端进行交互,必须使用Socket类的方法获取流,不能使用自己创建的流
*     当我们创建客户端对象Socket的时候,请求服务器,然后和服务器建立连接通路
*      这时如果服务器没有启动,就会抛出异常!
*      这时如果服务器启动了,就与客户端进行交互
 package Net;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class TCP_Client {
        public static void main(String[] args) throws IOException {
            //1.
            Socket socket = new Socket("127.0.0.1", 8888);
            //2.
            OutputStream ops = socket.getOutputStream();
            //2.1
            ops.write("你好服务器".getBytes());
    
        //3
        InputStream is = socket.getInputStream();
        //3.1
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes, 0, len));
        //4
        socket.close();

    }
   }

//Exception in thread “main” java.net.ConnectException: Connection refused: connect
//不能连接,连接服务器异常

服务端-ServerSocket类

/*

  • TCP服务器端:接受客户端的请求,读取客户端发送的数据,给客户端回写数据

  •  服务端:java.net.ServerSocket类表示。
    
  • 构造方法:

  • ServerSocket(int port)---创建绑定特定套接字里的端口号
    
  • 服务器端必须明确一件事情:必须知道是哪个客户端请求的服务器

  • 所以需要通过服务器端的方法accept()获取客户端Socket对象
    成员方法:Socket类型 accept();
    
  • 服务器实现步骤:

  • 1.创建服务端ServerSocket对象

  • *2.使用服务端ServerSocket对象的方法accept()—获取到请求客户端Socket对象

  • 3.使用Socket类中的成员方法getInputStream();—获取字节输入流InputStream对象

  • 3.1在使用网络字节输入流InputStream对象中的方法read();— 读取客户端发送的数据

  • 4.使用使用Socket类中的成员方法getOutputStream();—获取到字节输出流OutputStream对象

  • 4.1再使用网络字节输出流OutputStream对象中的方法write();—给客户端回写送数据

  • 5.释放资源

  • */

    package Net;
        impor  java.io.IOException;
        import java.io.InputStream;
        import java.io.OutputStream;
        import java.net.ServerSocket;
        import java.net.Socket;
    
     
    
       public class TCP_Server {
              public static void main(String[] args) throws IOException {
                  //1.
                  ServerSocket serverSocket = new ServerSocket(8888);
                  //*2.
                  Socket s = serverSocket.accept();
                  //3
                  InputStream is = s.getInputStream();
                  //3.1
                  byte[] bytes = new byte[1024];
                  int len = is.read(bytes);
                  System.out.println(new String(bytes, 0, len));
                  //4
                  OutputStream outputStream = s.getOutputStream();
                  //4.1
                  outputStream.write("收到谢谢".getBytes());
                  //5
                  s.close();
                  serverSocket.close();
      
        }
      }
    

TCP通信
TCP通信