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 }
View Code

客户端:

 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 }
View Code

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 }
View Code

服务端:

 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 }
View Code

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 }
View Code

客户端:

 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 }
View Code

 

posted on 2018-01-21 16:04  jovelove  阅读(111)  评论(0)    收藏  举报