zoukankan      html  css  js  c++  java
  • Java Socket通信

     1、TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低

             2、Java中基于TCP协议实现网络通信的类
                客户端的Socket类
                服务器端的ServerSocket类
               
                3、Socket通信的步骤
                     ① 创建ServerSocket和Socket
                     ② 打开连接到Socket的输入/输出流
                     ③ 按照协议对Socket进行读/写操作
                     ④ 关闭输入输出流、关闭Socket
     
       4、服务器端:
                     ① 创建ServerSocket对象,绑定监听端口
                     ② 通过accept()方法监听客户端请求
                     ③ 连接建立后,通过输入流读取客户端发送的请求信息
                     ④ 通过输出流向客户端发送乡音信息
                     ⑤ 关闭相关资源
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务端
     * 
     * @author sun
     *
     */
    public class Server {
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(10086);// 1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            Socket socket = null;
            BufferedReader br = null;
            PrintWriter pw = null;
            while (true) {
                System.out.println("服务端启动");
                socket = serverSocket.accept();// 2、 监听客户端连接,程序一直阻塞在这个语句上进行等待
                // 3、获取输入流,并读取客户端信息
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String reqstr = br.readLine();
                System.out.println("服务端收到请求报文:" + reqstr);
                // 4、获取输出流,响应客户端的请求
                pw = new PrintWriter(socket.getOutputStream());// 建立一个Socket
                pw.write("发送报文成功,响应客户端!");
                pw.flush();
                // 5、关闭资源;采用倒关原则
                pw.close();
                br.close();
            }
        }
    }
            5、客户端:
                     ① 创建Socket对象,指明需要连接的服务器的地址和端口号
                     ② 连接建立后,通过输出流想服务器端发送请求信息
                     ③ 通过输入流获取服务器响应的信息
                     ④ 关闭响应资源 
    /**
     * 客户端
     * 
     * @author sun
     *
     */
    public class Client {
        public static void main(String[] args) throws IOException {
            System.out.println("我是客户端");
            Socket socket = new Socket("localhost", 10086);// 1、创建客户端Socket,指定服务器地址和端口
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println("client request");
            pw.flush();
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while ((info = br.readLine()) != null) {
                System.out.println("我是客户端,服务端响应:" + info);
            }
            // 4、关闭资源
            br.close();
            is.close();
            pw.close();
        }
    }

    在写这个Demo时,遇到过异常,这个异常是java.net.SocketException: Socket is closed,

    该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

    参考连接:https://www.cnblogs.com/rocomp/p/4790340.html

     
  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/sunTin/p/8545271.html
Copyright © 2011-2022 走看看