1、消息发送
发送端:
public class UdpClient {
public static void main(String[] args) throws IOException {
//1、建立一个socket
DatagramSocket socket = new DatagramSocket();
/*
byte buf[], int offset, int length,
InetAddress address, int port
*/
String msg = "你好Udp";
int port = 9090;
InetAddress inetAddress = InetAddress.getByName("localhost");
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,inetAddress,port);
//发送消息
socket.send(datagramPacket);
}
}
接收端:
public class UdpServer {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9090);
/*
byte buf[], int offset, int length
*/
//接收数据包
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
//接收
datagramSocket.receive(datagramPacket);
System.out.println(new String(datagramPacket.getData()));
datagramSocket.close();
}
}
2、聊天
发送端:
public class UdpChatClient {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
InputStreamReader reader = new InputStreamReader(System.in);
while (true){
BufferedReader bufferedr = new BufferedReader(reader);
String s = bufferedr.readLine();
DatagramPacket packet = new DatagramPacket(s.getBytes(),0,s.getBytes().length,
InetAddress.getByName("localhost"),6666);
socket.send(packet);
if (s.equals("bye")){
break;
}
}
socket.close();
}
}
接收端:
public class UdpChatServer {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true){
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);
byte[] data = packet.getData();
String s = new String(data,0,data.length);
System.out.println(s);
if (s.equals("bye")){
break;
}
}
socket.close();
}
}
3、多线程聊天
发送端线程:
public class UdpChatThreadClient implements Runnable{
private DatagramSocket socket = null;
private InputStreamReader reader = null;
private int formPort ;
private String toIp;
private int port;
public UdpChatThreadClient(int formPort, String toIp, int port) {
this.formPort = formPort;
this.toIp = toIp;
this.port = port;
try{
this.socket = new DatagramSocket(this.formPort);
this.reader = new InputStreamReader(System.in);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
BufferedReader bufferedr = new BufferedReader(reader);
String s = null;
try {
s = bufferedr.readLine();
DatagramPacket packet = new DatagramPacket(s.getBytes(),0,s.getBytes().length,
InetAddress.getByName(this.toIp),this.port);
socket.send(packet);
if (s.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
接收端线程:
public class UdpChatThreadServer implements Runnable{
private DatagramSocket socket = null;
private int port;
private String mstForm;
public UdpChatThreadServer( int port,String mstForm) {
this.port = port;
this.mstForm = mstForm;
try{
this.socket = new DatagramSocket(this.port);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
try {
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);
byte[] data = packet.getData();
String s = new String(data,0,data.length);
System.out.println(this.mstForm+":" + s);
if (s.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
启动线程:
public class StudentTalk {
public static void main(String[] args) {
new Thread(new UdpChatThreadClient(7777,"localhost",9999)).start();
new Thread(new UdpChatThreadServer(8888,"老师")).start();
}
}
public class TeachTalk {
public static void main(String[] args) {
new Thread(new UdpChatThreadClient(5555,"localhost",8888)).start();
new Thread(new UdpChatThreadServer(9999,"学生")).start();
}
}