1. 程式人生 > >java 網絡編程 基於UDP協議的通信

java 網絡編程 基於UDP協議的通信

arr 取ip 線程 tle read extend println nextline out

使用UDP協議,寫一個能在同一界面發送消息,並顯示消息的聊天軟件。

代碼實現如下:

package com.abel.socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/*
* 多線程在一個界面同時完成發送接收

* 1 發送send
* ***創建DatagramSocket,隨機端口號
* 創建DatagramPacket,指定數據,長度,地址,端口
* 使用DatagramSocket發送DatagramPacket
* 關閉DatagramSocket

*2 接收 Receive
* 創建DatagramSocket,指定端口號
* 創建DatagramPacket,指定字節數組 長度
* 使用DatagramSocket接收DatagramPacket
* 關閉DatagramSocket
* 從DatagramPacket中獲取數據


*/
public class Demo3_MoreThread {

public static void main(String[] args) throws InterruptedException {
new Receive().start();
Thread.sleep(10);
new Send().start();

}

}
class Receive extends Thread{
public void run() {
try {
DatagramSocket socket= new DatagramSocket(3321);
while(true) {
DatagramPacket packet=new DatagramPacket(new byte[1024], 1024);
socket.receive(packet);
byte[]arr=packet.getData();
int len=packet.getLength();
String ip=packet.getAddress().getHostAddress();//獲取ip地址
int port=packet.getPort();//獲取端口號
System.out.println(ip+":"+port+":"+new String(arr,0,len));
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
class Send extends Thread{
public void run() {
try {
Scanner sc=new Scanner(System.in);
DatagramSocket socket=new DatagramSocket();
while(true) {
String str=sc.nextLine();
if("quit".equals(str)) {
break;
}
DatagramPacket packet=new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 3321);
socket.send(packet);
}
socket.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
}

java 網絡編程 基於UDP協議的通信