1. 程式人生 > >基於UDP的網路程式設計實現簡單聊天室

基於UDP的網路程式設計實現簡單聊天室

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

public class Sender {

	public static void main(String[] args) {
		
		DatagramSocket ds=null;	
		try {
			//建立DataGramSocket物件,制定傳送方的埠號
			System.out.println("同學上線了");
			ds = new DatagramSocket(8888);
			while(true) {
				//將同學的輸入轉成位元組陣列
				Scanner sc=new Scanner(System.in);
				System.out.print("學生:");
				String str=sc.next();
				byte [] a=str.getBytes();
				//建立一個數據包,用該資料包包裹同學資訊傳送給接受者諮詢老師
				DatagramPacket dp=new DatagramPacket(a, a.length, InetAddress.getByName("192.168.51.179"), 10001);
				ds.send(dp);
				
				
				//準備一個空的資料包,用來接收資料
				 byte[] b=new byte[1024];
		         DatagramPacket dp1=new DatagramPacket(b, b.length);
		         ds.receive(dp1);
		         
		         System.out.println("諮詢老師:"+new String(dp1.getData(),0,dp1.getLength()));
			}
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//關閉
			ds.close();
		}	
			
	}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Receiver {

	public static void main(String[] args) {
		
		
		DatagramSocket ds=null;
		try {
			//建立DataGramSocket物件,制定接受方的埠號
			System.out.println("諮詢老師上線了");
			ds = new DatagramSocket(10001);
			while(true) {
				//準備一個空的資料包,用來接收資料
				byte [] a=new byte[1024];
				DatagramPacket dp=new DatagramPacket(a, a.length);
				//接受資料,存放在資料包中
				ds.receive(dp);
				
				/*
				 * dp.getData()得到的是一個位元組陣列,我要展示的話就要將位元組陣列轉為字串.
				 *  通過後兩個引數控制輸出的長度
				 */
				System.out.println("同學:"+new String(dp.getData(),0,dp.getLength()));
				
				//將老師輸入轉成位元組陣列
				Scanner sc=new Scanner(System.in);
				System.out.print("諮詢老師:");
				String str=sc.next();
				byte [] b=str.getBytes();
				//建立一個數據包,用該資料包包裹同學資訊傳送給接受者諮詢老師
				DatagramPacket dp1=new DatagramPacket(b, b.length, InetAddress.getByName("192.168.51.179"), 8888);
				ds.send(dp1);
			}
			
			
		} catch ( IOException e) {
			e.printStackTrace();
		}finally {
			ds.close();
		}	
	}

}

執行效果:

諮詢老師上線了
同學:老師,我想學java
諮詢老師:同學,你有基礎嗎
同學:沒有呢,零基礎可以學嗎
諮詢老師:可以呢
同學:那學費是多少呢
諮詢老師:19998,可以接受嗎
同學:有點小貴
諮詢老師:
同學上線了
學生:老師,我想學java
諮詢老師:同學,你有基礎嗎
學生:沒有呢,零基礎可以學嗎
諮詢老師:可以呢
學生:那學費是多少呢
諮詢老師:19998,可以接受嗎
學生:有點小貴

-------------------------------------------------------------------------------------------------------------------------------------------

以上聊天無法結束,可以加入一個if判斷,當學生輸入再見,結束對話。