Java基础之Socket编程

    xiaoxiao2021-04-17  37

    1. Socket的作用

    用于计算机与计算机之前通过网络传输数据通讯-->Socket

    2. 基本网络知识

    IP:计算机在网络的唯一标示,通过IP地址就可以找到一台计算机

    端口:操作系统上软件的唯一标记。80(Web默认端口),3306(MySQL默认端口)1024以前的端口都被系统占用了。端口的范围:1~65535。定义端口的时候最好使用1024以后的端口。

    协议:UDP   TCP

    2.1 UDP TCP的区别

    UDP:无连接,速度快。不保证数据的完整性。

    TCP:通过三次握手机制,形成数据传输通道(字节流),速度慢。保证数据的完整性,如果丢包,会重发!

    3. Socket编程示例:

    3.1 服务端代码:(需求:发一段话到客户端,然后接受从客户端发回来的数据打印)

    try { // 1.创建服务器端Socket对象(服务端IP:192.168.10.1) ServerSocket ss = new ServerSocket(8888); System.out.println("服务器已经启动,正在监听8888端口..."); // 2.不断接收客户端的请求 while (true) { final Socket socket = ss.accept(); System.out.println("接收客户端:"+socket); //每个客户端的处理启动一个新的线程 new Thread(){ public void run(){ try{ // 获取客户端(访问者)的iP地址 String ip = socket.getInetAddress().getHostAddress(); // 3.构建数据发送的通道 BufferedWriter br = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); // 3.1 构建数据接收通道 BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); // 4.发送数据 br.write("你们好,请发你们的名字过来\r\n"); br.flush();//手动刷新缓存区,发送数据 System.out.println("来自于" + ip + ",说:" + reader.readLine()); //5.关闭资源 br.close(); reader.close(); socket.close(); }catch(Exception e){ throw new RuntimeException(e); } } }.start(); } } catch (Exception e) { throw new RuntimeException(e); }

    3.2 客户端代码:(接收服务端发出的数据,打印,然后把自己的名字发送到服务端。 服务端IP:192.168.10.1, 端口:8888)

    // 1.创建客户端的Socket对象 try { Socket socket = new Socket("192.168.10.1", 8888); // 2.构建和服务器端的数据接收通道 BufferedReader reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); // 构建和服务器端的数据发送通道 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); // 3.接收服务器发送的数据 System.out.println(reader.readLine()); // 4.发送数据到服务器端 writer.write("我的名字eric"); writer.newLine(); writer.flush();//手动刷新 //5.关闭资源 reader.close(); socket.close(); } catch (Exception e) { throw new RuntimeException(e); }

    转载请注明原文地址: https://ju.6miu.com/read-674088.html

    最新回复(0)