Socket通信

    xiaoxiao2021-12-14  19

    Socket通信分为两类:TCP和UDP。而TCP和UDP都分为两端。

    一,TCP 1,服务器端

    package com.jackie.day11; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) { ServerSocket ss = null; Socket s = null; PrintWriter pw = null; try { ss = new ServerSocket(8888); s = ss.accept();// 开始监听,一直阻塞程序,直到接收到了客户端的连接就会返回一个代表这个客户端的Socket System.out.println("客户端来了!"); pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream())); pw.println("客户端你好!"); pw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if (pw != null) { pw.close(); } if (ss != null) { try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    2,客户端

    package com.jackie.day11; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class TCPClient { public static void main(String[] args) { Socket s = null; BufferedReader br = null; String str = null; try { s = new Socket("192.168.1.100", 8888); br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8")); str = br.readLine(); System.out.println(str); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    二,UDP

    1,发送端

    package com.jackie.day11; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPSender { public static void main(String[] args) { DatagramSocket ds = null; try { ds = new DatagramSocket();// 发包时不用指定端口号 String data = "UDP发送过来的数据!"; byte[] buf = data.getBytes(); // 创建一个要发送到指定IP地址的指定端口号上的包 DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 6666); ds.send(packet); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) { ds.close(); } } } }

    2,接收端

    package com.jackie.day11; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * 要先运行接收包的程序 * * @author Administrator * */ public class UDPReceiver { public static void main(String[] args) { DatagramSocket ds = null; byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); try { ds = new DatagramSocket(6666);// 收包时要指定端口号 ds.receive(packet);// 开始接收包,未接收到前,一直阻塞 String str = new String(buf, 0, packet.getLength()); System.out.println(str); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) { ds.close(); } } } }
    转载请注明原文地址: https://ju.6miu.com/read-972040.html

    最新回复(0)