java网络编程基础之TCP网络编程

      最后更新:2022-02-21 22:13:04 手机定位技术交流文章

      目录

      • Socket

        • 基本介绍:
        • 示意图:
      • TCP网络通信编程

        • 基本介绍:
      • 示例(基于TCP协议实现服务端和客户端的网络通信)

        • 基本思路:
        • 服务端代码实现
        • 客户端代码实现

      Socket

      基本介绍:

      1. 套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准
      2. 通信的两端都要有Socket,是两台机器间通信的端点
      3. 网络通信其实就是Socket间的通信
      4. Socket允许将网络连接当成一个流,数据在两个Socket间通过IO传输
      5. 一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端
      6. 支持TCP协议和UDP协议

      示意图:

      alt需要通讯时:(读写数据)

      1. socket.getOutputStresm()
      2. socket.getInputStream()

      TCP网络通信编程

      基本介绍:

      1. 基于客户端————服务端的网络通信
      2. 底层使用的是TCP/IP协议
      3. 应用场景举例:客户端发送数据,服务端接收数据
      4. 基于Socket的TCP编程alt

      示例(基于TCP协议实现服务端和客户端的网络通信)

      基本思路:

      -客户端:获得服务端的InetAddress对象(ip)和服务端所监听的端口号,将数据传入数据通道 -服务端:设置端口号(此端口号不能被其他程序占用),监听此端口号,如果有客户端向此端口的数据通道发送数据,进行接收,打印在命令行

      服务端代码实现

      
      import java.io.IOException;
      import java.io.InputStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * 服务端
       */
      public class SocketTCP01Server {
          public static void main(String[] args) throws IOException {
              //在9999端口监听
              //注意:确保9999端口号没有被其他程序监听
              // serverSocket可以多次accept,等待多个服务端的连接
              ServerSocket serverSocket = new ServerSocket(9999);
              System.out.println("服务端正在监听9999号端口,等待客户端发送数据...");
              //当没有服务端连接9999端口时,程序会阻塞,等待连接
              //当有服务端连接9999端口时,程序会继续,返回Socket对象
              Socket socket = serverSocket.accept();
              //通过输入流获取socket接收到的数据
              InputStream inputStream = socket.getInputStream();
              //读取输入流中的数据
              byte[] bytes=new byte[1024];
              int bytesLength=0;
              while ((bytesLength=inputStream.read(bytes))!=-1){
                  System.out.print(new String(bytes,0,bytesLength));
              }
              System.out.println();
              //关闭输入流
              inputStream.close();
              //关闭socket
              socket.close();
              //关闭serverSocket
              serverSocket.close();
              System.out.println("服务端退出");
          }
      }
      
      

      客户端代码实现

      import java.io.IOException;
      import java.io.OutputStream;
      import java.net.InetAddress;
      import java.net.Socket;
      import java.nio.charset.StandardCharsets;
      
      public class SocketTCP01Client {
         	public static void main(String[] args) throws IOException {
              //获取服务端的ip和服务的端口号(这里服务端是本机,如果远程服务器,可以输入远程服务器的ip地,例如"192.168.56.1")
              Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
              //通过输出流向服务端传输数据
              OutputStream outputStream = socket.getOutputStream();
              outputStream.write("hello,sever".getBytes(StandardCharsets.UTF_8));
              //关闭输出流
              outputStream.close();
              //关闭socket
              socket.close();
              System.out.println("客户端退出");
          }
      }
      
      

      开启服务端后:

      服务端正在监听9999号端口,等待客户端发送数据...
      

      开启客户端后: 客户端:

      客户端退出
      

      服务端:

      服务端正在监听9999号端口,等待客户端发送数据...
      hello,sever
      服务端退出
      

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/18784.html

          热门文章

          文章分类