大概思路就是在主线程中,跑两个子线程,一个用于发送消息,另一个用于接收消息,就这么简单... = = 代码附下:
/*<span> </span>by wbin 2015/12/18
利用UDP协议,实现了简单的双人聊天<span> </span>*/
</pre><pre name="code" class="java">import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class Test {
public static void main(String args[]){
//send
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
SendSocket sendRun=new SendSocket();
Thread sendThread=new Thread(sendRun);
sendThread.start();
}
}).start();
//receive
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
ReceiveSocket receiveRun = new ReceiveSocket();
Thread receiveThread = new Thread(receiveRun);
receiveThread.start();
}
}).start();
}
public static class SendSocket implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
DatagramSocket sendSocket=null;
DatagramPacket packet=null;
while(cin.hasNext()){
try {
// System.out.println("↑↑↑↑send:"); //System.out.println();
byte[] b = cin.next().getBytes("utf-8"); //接收方的端口9387
packet = new DatagramPacket(b, b.length, InetAddress.getByName("*.*.*.*"), 9387);<span style="white-space:pre"> </span>//接收方IP地址
sendSocket = new DatagramSocket(9303);
sendSocket.send(packet);
sendSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (cin != null)
cin.close();
if (sendSocket != null)
sendSocket.close();
}
}
public static class ReceiveSocket implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
byte[] b = new byte[1024];
DatagramPacket packet = new DatagramPacket(b, b.length);
DatagramSocket receiveSocket = null;
try {
receiveSocket = new DatagramSocket(9367); //监听9367端口
receiveSocket.receive(packet);
String text = new String(packet.getData(), 0, packet.getLength(),"utf-8");
System.out.println("receive from "+packet.getAddress()+ ": " + text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
receiveSocket.close();
}
}
}
}
}