java--socket
socket:
服务端:
1 package com.jove.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintStream; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 /** 10 * 11 * @author jove 12 * @date 2018年1月21日 13 * @description 14 * 15 */ 16 public class EchoServerDemo { 17 @SuppressWarnings("resource") 18 public static void main(String[] args) { 19 // 创建一个服务器端的Socket(1024-65535) 20 try { 21 ServerSocket serverSocket = new ServerSocket(8888); 22 System.out.println("服务器已启动,正在等待客户端的连接..."); 23 // 等待客户端的连接,造成阻塞,如果有客户端连接成功,立即返回一个Socket对象 24 Socket socket = serverSocket.accept(); 25 BufferedReader bReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 26 //通过输入流读取网络数据,如果没有数据,那么会阻塞 27 String line = bReader.readLine(); 28 System.out.println(line); 29 //获取输出流,向客户端返回消息 30 PrintStream pStream = new PrintStream(socket.getOutputStream()); 31 pStream.println("echo"+line); 32 pStream.flush(); 33 34 pStream.close(); 35 bReader.close(); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } 39 } 40 }
客户端:
1 package com.jove.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintStream; 7 import java.net.Socket; 8 9 public class EchoClientDemo { 10 @SuppressWarnings("resource") 11 public static void main(String[] args) { 12 // 创建一个Socket对象,指定要连接的服务器 13 try { 14 Socket socket = new Socket("localhost", 8888); 15 // 创建一个Socket对象,指定要连接的服务器 16 PrintStream pStream = new PrintStream(socket.getOutputStream()); 17 BufferedReader bReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 18 19 pStream.println("hello,my name is jove"); 20 pStream.flush(); 21 //读取服务器端返回的数据 22 String line = bReader.readLine(); 23 System.out.println(line); 24 25 bReader.close(); 26 pStream.close(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 }
socket+thread:
客户端:
1 package com.jove.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintStream; 7 import java.net.Socket; 8 import java.util.Scanner; 9 /** 10 * 11 * @author jove 12 * @date 2018年1月21日 13 * @description 14 * 15 */ 16 public class MultiEchoClientDemo { 17 18 19 @SuppressWarnings("resource") 20 public static void main(String[] args) { 21 Scanner input = new Scanner(System.in); 22 // 创建一个Socket对象,指定要连接的服务器 23 try { 24 Socket socket = new Socket("localhost", 8888); 25 // 创建一个Socket对象,指定要连接的服务器 26 PrintStream pStream = new PrintStream(socket.getOutputStream()); 27 BufferedReader bReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 28 System.out.println("请输入:"); 29 String info = input.nextLine(); 30 pStream.println(info); 31 pStream.flush(); 32 // 读取服务器端返回的数据 33 String line = bReader.readLine(); 34 System.out.println(line); 35 36 bReader.close(); 37 pStream.close(); 38 } catch (IOException e) { 39 e.printStackTrace(); 40 } 41 } 42 }
服务端:
1 package com.jove.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintStream; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 import java.util.concurrent.ExecutorService; 10 import java.util.concurrent.Executors; 11 12 /** 13 * 14 * @author jove 15 * @date 2018年1月21日 16 * @description 17 * 18 */ 19 public class MultiEchoServerDemo { 20 @SuppressWarnings("resource") 21 public static void main(String[] args) { 22 // 创建一个服务器端的Socket(1024-65535) 23 ExecutorService eService = Executors.newFixedThreadPool(3); 24 try { 25 ServerSocket serverSocket = new ServerSocket(8888); 26 System.out.println("服务器已启动,正在等待客户端的连接..."); 27 // 等待客户端的连接,造成阻塞,如果有客户端连接成功,立即返回一个Socket对象 28 while (true) { 29 Socket socket = serverSocket.accept(); 30 System.out.println(socket.getInetAddress().getHostAddress()); 31 eService.execute(new ClientThread(socket)); 32 33 } 34 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 } 39 } 40 41 /** 42 * 43 * @author jove 44 * @date 2018年1月21日 45 * @description 客户端线程 46 * 47 */ 48 class ClientThread implements Runnable { 49 private Socket socket; 50 51 public Socket getSocket() { 52 return socket; 53 } 54 55 public void setSocket(Socket socket) { 56 this.socket = socket; 57 } 58 59 public ClientThread() { 60 } 61 62 public ClientThread(Socket socket) { 63 this.socket = socket; 64 } 65 66 @Override 67 public void run() { 68 try { 69 BufferedReader bReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 70 // 通过输入流读取网络数据,如果没有数据,那么会阻塞 71 String line = bReader.readLine(); 72 System.out.println(line); 73 // 获取输出流,向客户端返回消息 74 PrintStream pStream = new PrintStream(socket.getOutputStream()); 75 pStream.println("echo:" + line); 76 pStream.flush(); 77 78 pStream.close(); 79 bReader.close(); 80 } catch (IOException e) { 81 e.printStackTrace(); 82 } 83 } 84 85 }
UDP:
服务端:
1 package com.jove.socket; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostException; 9 10 /** 11 * 12 * @author jove 13 * @date 2018年1月21日 14 * @description 15 * 16 */ 17 public class UDPServerDemo { 18 19 public static void main(String[] args) { 20 21 String info = "good good 学习,天天 UP"; 22 byte[] bytes = info.getBytes(); 23 try { 24 //封装一个数据报包 25 /* 26 buf - 数据包数据。 27 offset - 分组数据偏移量。 28 length - 分组数据长度。 29 address - 目的地址。 30 port - 目的端口号。 31 32 */ 33 DatagramPacket dp = new DatagramPacket( 34 bytes, 35 0, 36 bytes.length, 37 InetAddress.getByName("127.0.0.1"), 38 8000); 39 //本程序的端口 40 DatagramSocket socket = new DatagramSocket(9000); 41 socket.send(dp); 42 socket.close(); 43 }catch (UnknownHostException|SocketException e){ 44 e.printStackTrace(); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 } 48 } 49 }
客户端:
1 package com.jove.socket; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.SocketException; 7 8 /** 9 * 10 * @author jove 11 * @date 2018年1月21日 12 * @description 13 * 14 */ 15 public class UDPClientDemo { 16 public static void main(String[] args) { 17 18 byte[] bytes = new byte[1024]; 19 DatagramPacket dp = new DatagramPacket(bytes,bytes.length); 20 try { 21 DatagramSocket socket = new DatagramSocket(8000); 22 System.out.println("正在接收数据中..."); 23 socket.receive(dp);//接收数据 24 String s = new String(dp.getData(),0,dp.getLength()); 25 System.out.println(s); 26 socket.close(); 27 } catch (SocketException e) { 28 e.printStackTrace(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 33 } 34 }
浙公网安备 33010602011771号