【java】网络socket编程简单示例
1 package 网络编程; 2 3 import java.io.IOException; 4 import java.io.PrintStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 public class TestServerSocket { 9 public static void main(String[] args) throws IOException { 10 ServerSocket server=new ServerSocket(9999); 11 System.out.println("正在连接中……"); 12 Socket client=server.accept(); 13 PrintStream out=new PrintStream(client.getOutputStream()); 14 out.println("北京欢迎你。"); 15 out.close(); 16 client.close(); 17 server.close(); 18 } 19 }
1 package 网络编程; 2 3 import java.io.IOException; 4 import java.net.Socket; 5 import java.net.UnknownHostException; 6 import java.util.Scanner; 7 8 public class TestSocket { 9 public static void main(String[] args) throws UnknownHostException, IOException { 10 Socket client=new Socket("localhost",9999); 11 Scanner scan=new Scanner(client.getInputStream()); 12 scan.useDelimiter("\n"); 13 if(scan.hasNext()) 14 System.out.println("响应数据:"+scan.next()); 15 scan.close(); 16 client.close(); 17 } 18 }
echo模型:
1 package 网络编程; 2 3 import java.io.IOException; 4 import java.io.PrintStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 import java.util.Scanner; 8 9 public class TestEchoServer { 10 public static void main(String[] args) throws IOException { 11 ServerSocket server = new ServerSocket(9999); 12 Socket client = server.accept(); 13 Scanner scan = new Scanner(client.getInputStream());// 接收客户端输入 14 PrintStream out = new PrintStream(client.getOutputStream());// 输出到客户端 15 boolean flag = true; 16 String tmp = ""; 17 while (flag) { 18 if (scan.hasNext()) { 19 tmp = scan.next().trim(); 20 if (tmp.equalsIgnoreCase("bye")) { 21 out.println("再见!"); 22 flag = false; 23 } else { 24 out.println("Echo:" + tmp); 25 } 26 } 27 } 28 out.close(); 29 scan.close(); 30 client.close(); 31 server.close(); 32 } 33 }
1 package 网络编程; 2 3 import java.io.IOException; 4 import java.io.PrintStream; 5 import java.net.Socket; 6 import java.net.UnknownHostException; 7 import java.util.Scanner; 8 9 public class TestEchoClient { 10 public static void main(String[] args) throws UnknownHostException, IOException { 11 Socket client=new Socket("localhost",9999); 12 Scanner scan=new Scanner(System.in);//键盘输入 13 Scanner in=new Scanner(client.getInputStream());//服务端输入 14 PrintStream out=new PrintStream(client.getOutputStream());//输出到服务端 15 scan.useDelimiter("\n"); 16 // in.useDelimiter("\n"); 17 boolean flag=true; 18 String msg=""; 19 while(flag){ 20 if(scan.hasNext()){//等待用户从键盘输入 21 msg=scan.next().trim(); 22 out.println(msg);//信息转给服务端 23 if(msg.equalsIgnoreCase("bye")) 24 flag=false; 25 else 26 System.out.println(in.next());//打印服务端响应的信息 27 } 28 } 29 out.close(); 30 in.close(); 31 scan.close(); 32 client.close(); 33 } 34 }
1 package 网络编程; 2 3 import java.io.IOException; 4 import java.io.PrintStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 import java.util.Scanner; 8 9 class ClientThread implements Runnable { 10 private Socket client; 11 12 public ClientThread(Socket client) { 13 this.client = client; 14 } 15 16 @Override 17 public void run() { 18 try { 19 Scanner scan = new Scanner(client.getInputStream());// 接收客户端输入 20 PrintStream out = new PrintStream(client.getOutputStream());// 输出到客户端 21 boolean flag = true; 22 String tmp = ""; 23 while (flag) { 24 if (scan.hasNext()) { 25 tmp = scan.next().trim(); 26 if (tmp.equalsIgnoreCase("bye")) { 27 out.println("再见!"); 28 flag = false; 29 } else { 30 out.println("Echo:" + tmp); 31 } 32 } 33 } 34 out.close(); 35 scan.close(); 36 client.close(); 37 } catch (Exception e) { 38 e.printStackTrace(); 39 } 40 } 41 } 42 43 public class TestEchoServer { 44 public static void main(String[] args) throws IOException { 45 ServerSocket server = new ServerSocket(9999); 46 boolean flag = true; 47 while (flag) { 48 Socket client = server.accept();//连接多个客户端 49 new Thread(new ClientThread(client)).start();//每连接一个客户端启动一个线程 50 } 51 server.close(); 52 } 53 }