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(); } } } }