使用UDP协议完成双向聊天功能
要实现双向聊天,首先我们要开两个线程。其次因为这里只是做测试,因此我们的接收端和发送端都是本机。
首先是SendThread.java:
1 package com.hw.UDP0226;
2
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 import java.net.InetAddress;
6 import java.net.SocketException;
7 import java.util.Scanner;
8
9 @SuppressWarnings("unused")
10 public class SendThread extends Thread{
11
12 private int port;
13 public SendThread(int port){
14 this.port = port;
15 }
16
17 public void run(){
18 DatagramSocket ds = null;
19 try {
20 ds = new DatagramSocket();
21 Scanner s = new Scanner(System.in);
22 while(true)
23 {
24 String str = s.nextLine();
25 byte[] buf = str.getBytes();
26 int length = buf.length;
27 InetAddress address = InetAddress.getByName("192.168.0.105");
28 DatagramPacket dp = new DatagramPacket(buf, length,address,port);
29 ds.send(dp);
30 }
31
32 } catch (Exception e) {
33 // TODO Auto-generated catch block
34 e.printStackTrace();
35 } finally{
36 if(ds != null){
37 ds.close();
38 }
39 }
40 }
41 }
因为是双向聊天,所以我们发送的数据都是需要用户输入的,肯定是接受用户输入内容后转化为字符串并保存到数组中。
ReceiveThread.java:
1 package com.hw.UDP0226;
2
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 import java.net.InetAddress;
6 import java.net.SocketException;
7 import java.util.Scanner;
8
9 @SuppressWarnings("unused")
10 public class ReceiveThread extends Thread{
11
12 private int port;
13 public ReceiveThread(int port){
14 this.port = port;
15 }
16
17 public void run(){
18 DatagramSocket ds = null;
19 try {
20 ds = new DatagramSocket(port);
21 while(true)
22 {
23 byte[] buf = new byte[1024];
24 int length = buf.length;
25 DatagramPacket dp = new DatagramPacket(buf,length);
26 ds.receive(dp);
27 String str = new String(dp.getData(),0,dp.getLength());
28 InetAddress address = dp.getAddress();
29 System.out.println(address+":"+str);
30 }
31
32 } catch (Exception e) {
33 // TODO Auto-generated catch block
34 e.printStackTrace();
35 }finally{
36 if(ds != null){
37 ds.close();
38 }
39 }
40 }
41 }
然后我们再来开发两个聊天的用户:
ChattingRoom_User1.java:
1 package com.hw.UDP0226;
2
3 public class ChattingRoom_User1 {
4 public static void main(String[] args) {
5 new SendThread(7979).start();
6 new ReceiveThread(7980).start();
7 }
8 }
ChattingRoom_User2.java:
1 package com.hw.UDP0226;
2
3 public class ChattingRoom_User2 {
4 public static void main(String[] args) {
5 new ReceiveThread(7979).start();
6 new SendThread(7980).start();
7 }
8 }
注意因为是双向聊天,所以需要使用两个端口号!


浙公网安备 33010602011771号