网络连接
网络程序
服务器端程序
1 import java.io.PrintStream; 2 import java.net.ServerSocket; 3 import java.net.Socket; 4 5 public class HelloServer { 6 public static void main(String[] args) throws Exception{ 7 ServerSocket serversocket = new ServerSocket(9999); // 本程序在9999端口连接 8 System.out.println("[HelloServer] 服务器端启动监听... ..."); 9 // 每一个连接到服务器端的客户端都通过Socket对象来描述,所以要等待连接 10 Socket client = serversocket.accept(); // 等待客户端连接 11 // 向指定的Socket实现数据的输出,获取Socket的输出流 12 PrintStream out = new PrintStream(client.getOutputStream()); // 通过打印流输出 13 out.println("www.yootk.com"); // 输出信息 14 client.shutdownOutput(); // 数据发送完毕后再关闭 15 serversocket.close(); // 关闭整个服务器 16 } 17 }
客户端程序
1 import java.net.Socket; 2 import java.util.Scanner; 3 4 public class HelloClient { 5 public static void main(String[] args) throws Exception{ 6 // Socket是工作在客户端的程序类,每一个Socket对象描述的都是一个独立的客户端 7 Socket client = new Socket("localhost",9999); 8 Scanner scanner = new Scanner(client.getInputStream()); // 服务器端的输出为客户端的输入 9 if(scanner.hasNext()) { // 此时有数据需要进行输出 10 System.out.println("[HelloClient] "+scanner.next()); 11 } 12 client.shutdownInput(); 13 } 14 }
Echo模型
服务器端程序
1 import java.io.PrintStream; 2 import java.net.ServerSocket; 3 import java.net.Socket; 4 import java.util.Scanner; 5 6 public class EchoServer { 7 public static void main(String[] args) throws Exception{ 8 ServerSocket serversocket = new ServerSocket(9999); 9 Socket client = serversocket.accept(); // 进入阻塞状态,等待客户端连接 10 Scanner scanner = new Scanner(client.getInputStream()); // 服务器端输入流 11 PrintStream out = new PrintStream(client.getOutputStream()); // 服务器端输出流 12 boolean flag = true; 13 while(flag) { 14 if(scanner.hasNext()) { // 如果现在有输入的数据内容 15 String value = scanner.next().trim(); 16 if(value.equalsIgnoreCase("exit")) { 17 out.println("[EchoServer]exit"); 18 flag = false; 19 break; 20 } 21 out.println("ECHO:"+ value); 22 } 23 } 24 serversocket.close(); 25 } 26 }
客户端程序
1 import java.io.PrintStream; 2 import java.net.Socket; 3 import java.util.Scanner; 4 5 public class EchoClient { 6 public static void main(String[] args) throws Exception{ 7 Socket client = new Socket("localhost",9999); 8 Scanner scanner = new Scanner(client.getInputStream()); // 客户端输入流 9 PrintStream out = new PrintStream(client.getOutputStream()); // 客户端输出流 10 boolean flag = true; 11 while(flag) { 12 String value = KeyboardInput.getString("请输入数据:"); 13 out.println(value); 14 if(scanner.hasNext()) { 15 System.out.println("[ECHO客户端]" + scanner.next()); //服务器端响应 16 } 17 if(value.equalsIgnoreCase("exit")){ 18 flag = false; 19 } 20 } 21 client.close(); 22 } 23 }
BIO处理模型
服务器端
1 import java.net.ServerSocket; 2 import java.net.Socket; 3 4 public class EchoServer { 5 public static void main(String[] args) throws Exception{ 6 ServerSocket serversocket = new ServerSocket(9999); 7 boolean flag = true; 8 while(flag) { 9 Socket client = serversocket.accept(); 10 new Thread(new EchoHandle(client)).start(); 11 } 12 serversocket.close(); 13 } 14 }
服务器端线程类
1 import java.io.PrintStream; 2 import java.net.Socket; 3 import java.util.Scanner; 4 5 public class EchoHandle implements Runnable{ 6 private Socket client; 7 public EchoHandle(Socket client) { 8 this.client = client; 9 } 10 @Override 11 public void run() { 12 try { 13 Scanner scanner = new Scanner(client.getInputStream()); // 服务器端输入流 14 PrintStream out = new PrintStream(client.getOutputStream()); // 服务器端输出流 15 boolean flag = true; 16 while(flag) { 17 if(scanner.hasNext()) { // 如果现在有输入的数据内容 18 String value = scanner.next().trim(); 19 if(value.equalsIgnoreCase("exit")) { 20 out.println("[EchoServer]exit"); 21 flag = false; 22 }else { 23 out.println("ECHO:"+ value); 24 } 25 } 26 } 27 scanner.close(); 28 out.close(); 29 client.close(); 30 }catch(Exception e) {} 31 } 32 }
客户端
1 import java.io.PrintStream; 2 import java.net.Socket; 3 import java.util.Scanner; 4 5 public class EchoClient { 6 public static void main(String[] args) throws Exception{ 7 Socket client = new Socket("localhost",9999); 8 Scanner scanner = new Scanner(client.getInputStream()); // 客户端输入流 9 PrintStream out = new PrintStream(client.getOutputStream()); // 客户端输出流 10 boolean flag = true; 11 while(flag) { 12 String value = KeyboardInput.getString("请输入数据:"); 13 out.println(value); 14 if(scanner.hasNext()) { 15 System.out.println("[ECHO客户端]" + scanner.next()); //服务器端响应 16 } 17 if(value.equalsIgnoreCase("exit")){ 18 flag = false; 19 } 20 } 21 scanner.close(); 22 out.close(); 23 client.close(); 24 } 25 }
UDP程序
服务器端
1 import java.net.DatagramPacket; 2 import java.net.DatagramSocket; 3 import java.net.InetAddress; 4 5 public class UDPServer { 6 public static void main(String[] args) throws Exception{ 7 DatagramSocket server = new DatagramSocket(8000); // 服务器端端口 8 String message = "www.yootk.com"; 9 DatagramPacket packet = new DatagramPacket(message.getBytes(),0,message.length(),InetAddress.getByName("localhost"),9999); 10 server.send(packet); // 发送数据报 11 System.out.println("[UDPServer]finished..."); 12 server.close(); 13 } 14 }
客户端
1 import java.net.DatagramPacket; 2 import java.net.DatagramSocket; 3 4 public class UDPClient { 5 public static void main(String[] args) throws Exception{ 6 DatagramSocket client = new DatagramSocket(9999); 7 byte data[] = new byte[1024]; 8 DatagramPacket packet = new DatagramPacket(data, data.length); 9 System.out.println("[UDPClient]wait..."); 10 client.receive(packet); 11 System.out.println("[UDPClient]"+ new String(data,0,packet.getLength())); 12 } 13 }
原文:https://www.cnblogs.com/cxc1357/p/12460277.html