目录

一、基于Socket的TCP编程

 客户端Socket的工作过程包含以下四个基本的步骤: 

服务器程序的工作过程包含以下四个基本的步骤:

二:代码案例:


一、基于Socket的TCP编程

javascrip 通过socket和单片机通信 socket编程java例程_java

 客户端Socket的工作过程包含以下四个基本的步骤: 

  1. 创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。
  2. 打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,使用getOutputStream()
  3. 方法获得输出流,进行数据传输 按照一定的协议对 Socket 进行读/写操作:通过输入流读取服务器
  4. 放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线程。
  5. 关闭 Socket:断开客户端到服务器的连接,释放线路

服务器程序的工作过程包含以下四个基本的步骤:

  1. 调用 ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求。
  2. 调用 accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。
  3. 调用 该Socket类对象的 getOutputStream() 和 getInputStream ():获取输出流和输入流,开始网络数据的发送和接收。
  4. 关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字。 

二:代码案例:

 

public class TCPtest3 {
    @Test
    public void client() throws Exception {
//1、创建Socket对象,指明服务器端的ip和端口号
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);
//2、获取一个输出流,用于输出数据
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream("D:\\IdeaProjects\\Javaadvanced\\src\\InternetNews\\测试图.jpg");
        byte[] buffer = new byte[fis.available()];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        //关闭数据传输
        socket.shutdownOutput();
        //5.接收来自于服务器端的数据,显式到控制台
        InputStream is = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] bytes = new byte[20];
        int lens;
        while ((lens = is.read(bytes)) != -1) {
            baos.write(bytes, 0, lens);
        }

        System.out.println(baos.toString());
        fis.close();
        os.close();
        socket.close();
        baos.close();
        is.close();
    }

    @Test
    public void server() throws Exception {
  //1、创建服务器的ServerSocket,指明自己的端口号
        ServerSocket ss = new ServerSocket(9090);
//2、调用accept()表示接收来自于客户端的Socket
        Socket accept = ss.accept();
        InputStream is = accept.getInputStream();
        FileOutputStream fos = new FileOutputStream(new File("D:\\IdeaProjects\\Javaadvanced\\src\\InternetNews\\测试图1.jpg"));
        byte[] bytes = new byte[1024];
        int len;
        while ((len = is.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }
        //6.服务器端基于客户端反馈
        OutputStream os = accept.getOutputStream();
        os.write("你好,照片已收到".getBytes());
        fos.close();
        is.close();
        accept.close();
        ss.close();
        os.close();
    }
}