java

网络编程2

rzk · 4月4日 · 2020年本文共1972个字 · 预计阅读7分钟86次已读
 1 public class TalkReceive implements Runnable {
 2     DatagramSocket socket = null;
 3     private int port;
 4     private String msgFrom;
 5 
 6     public TalkReceive(int port,Stri睿共享ng msgFrom) {
 7         this.port = port;
 8         this.msgFrom = msgFrom;
 9         try {
10             socket = new DatagramSocket(port);
11         } catch (SocketException e) {
12             e.printStackTrace();
13         }
14     }
15 
16     @Override
17     public void run() {
18 
19         while(true) {
20             try {
21                 byte[] container = new byte[1024];
22 
23                 DatagramPacket packet = new DatagramPacket(container,0,container.length);
24                 socket.receive(packet);
25 
26                 //断开连接  bye
27   睿共享              byte[] data = packet.getData();
28                 String receiveData = new String(data, 0, data.length);
29 
30                 System.out.println(msgFrom+":"+receiveData);
31 
32                 if (receiveData.equals("bye")){
33                     break;
34                 }
35             } catch (IOException e) {
36                 e.printStackTrace();
37             }
38         }
39         sock睿共享et.close();
40     }
41 
42 }
 睿共享1 public class TalkSend implements Runnable {
 2     DatagramSocket socket = null;
 3     BufferedReader reader = null;
 4     private int fromPort;
 5     private String toIp;
 6     private int toPort;
 7 
 8     public TalkSend(int fromPort, String toIp, int toPort) {
 9         this.fromPort = fromPort;
10         this.toIp = toIp;
11         this.toPort = toPort;
12 
13         try{
14             socket = new DatagramSocket(fromPort);
15             reader = new BufferedReader(new InputStreamReader(System.in));
16 
17         }catch(Exception e){
18             e.printStackTrace();
19         }
20     }
21 
22     @Override
23     public void run() {
24         while(true) {
25             try {
26                 String data = reader.readLine();
27                 byte[] datas = data.getBytes();
28 
29                 DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toPort));//创建packet相当于创建集装箱
30                 socket.send(packet);//接货
31 //        byte[] arr = packet.getData();//获取数据
32 //        int len  = packet.getLength(); //获取有效的字节个数
33 //         System.out.println(new String(arr,0,len));
34                 if (data.equals("bye")) {
35                     break;
36                 }
37             } catch (Exception e) {
38                 e.printStackTrace();
39             }
40         }
41         socket.close();
42     }
43 
44 }
1 public class TalkStudent {
2     public static void main(String[] args) {
3         new Thread(new TalkSend(777,"localhost",9999)).start();
4         new Thread(new TalkReceive(8888,"老师")).start();
5     }
6 }
1 public class TalkTeacher {
2     public static void main(String[] args) {
3         new Thread(new TalkSend(555,"localhost",8888)).start();
4  睿共享       new Thread(new TalkReceive(9999,"学生")).start();
5     }
6 }

0 条回应