1. 程式人生 > >Java網路程式設計4.UDP網路程式設計之多執行緒優化

Java網路程式設計4.UDP網路程式設計之多執行緒優化

UDP網路程式設計之多執行緒優化——DatagramSocket類

1、UDP網路程式設計之多執行緒優化的思想

(1)一個執行緒實現客戶端——傳送資料

(2)一個執行緒實現伺服器端——接收資料

(3)在控制檯顯示解析出來的資料

2、UDP網路程式設計之多執行緒優化

(1)傳送資料端的執行緒——客戶端執行緒

package cn.itcast_05;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendThread implements Runnable {
	private DatagramSocket ds;
	public SendThread(DatagramSocket ds) { 
            this.ds = ds;
	}
	@Override
	public void run() {
		try {
			// 封裝鍵盤錄入資料
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String line = null;
			while ((line = br.readLine()) != null) {
				if ("886".equals(line)) {
					break;
				}
				// 建立資料並打包
				byte[] bys = line.getBytes();
				DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.12.255"), 12306);
				// 傳送資料
				ds.send(dp);
			}
			// 釋放資源
			ds.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

(2)接收資料端的執行緒——伺服器端執行緒

package cn.itcast_05;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveThread implements Runnable {
	private DatagramSocket ds;
	public ReceiveThread(DatagramSocket ds) {
		this.ds = ds;
	}
	@Override
	public void run() {
		try {
			while (true) {
				// 建立一個包裹
				byte[] bys = new byte[1024];
				DatagramPacket dp = new DatagramPacket(bys,bys.length);
				// 接收資料
				ds.receive(dp);
				// 解析資料
				String ip = dp.getAddress().getHostAddress();
				String s = new String(dp.getData(),0,dp.getLength());
				System.out.println("from " + ip + " data is : " + s);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(3)通過多執行緒改進剛才的聊天程式,這樣我們就可以實現在一個視窗傳送和接收資料了

package cn.itcast_05;
import java.io.IOException;
import java.net.DatagramSocket;
/*
 * 通過多執行緒改進剛才的聊天程式,這樣我就可以實現在一個視窗傳送和接收資料了
 */
public class ChatRoom {
	public static void main(String[] args) throws IOException {
		DatagramSocket dsSend = new DatagramSocket();
		DatagramSocket dsReceive = new DatagramSocket(12306);
		SendThread st = new SendThread(dsSend);
		ReceiveThread rt = new ReceiveThread(dsReceive);
		Thread t1 = new Thread(st);
		Thread t2 = new Thread(rt);
		t1.start();
		t2.start();
	}
}