1. 程式人生 > 實用技巧 >UDP案例_線上諮詢

UDP案例_線上諮詢

TalkReceiver 
package 網路程式設計;

import java.io.BufferedReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class TalkReceiver implements Runnable {
    private DatagramSocket server;
    private String from;
    public TalkReceiver(int port,String from)
    {
        
this.from = from; try { server = new DatagramSocket(port); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub while(true) {
byte[]container = new byte[1024*60]; DatagramPacket packet = new DatagramPacket (container,0,container.length); try { server.receive(packet); byte[]datas = packet.getData(); int len = packet.getLength(); String str
= new String(datas,0,len); System.out.println(from + ":" + str); if(str.equals("bye")) { break; } }catch(IOException e) { e.printStackTrace(); } } server.close(); } }

TalkSend 
package 網路程式設計;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable {
    private DatagramSocket client;
    private BufferedReader reader;
    private String toIP; 
    private int toPort; 
    public TalkSend(int port,String toIP, int toPort) {
        this.toIP = toIP;
        this.toPort = toPort;
        try{
            client = new DatagramSocket(port);
            reader = new BufferedReader(new InputStreamReader(System.in));
        }catch(SocketException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true)
        {
            String data;
            try
            {
                data = reader.readLine();
                byte []datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket (datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
                client.send(packet);
                if(data.equals("bye"))
                    break;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        client.close();
    }
}
TalkStudent 
package 網路程式設計;
//加入多執行緒  實現雙向交流  模擬線上諮詢
public class TalkStudent {

    public static void main(String[] args) {
        
        new Thread(new TalkSend(7777,"localhost",9999)).start();//傳送
        new Thread(new TalkReceiver(8888,"學生說")).start();//接收
    }
}

TalkTeacher

package 網路程式設計;

public class TalkTeacher {
    public static void main(String[] args) {
        new Thread(new TalkReceiver(9999,"老師說")).start();//接收
        new Thread(new TalkSend(5555,"localhost",8888)).start();//傳送
    }
}

這邊還有一個就是 在控制檯那邊有個新建console的按鈕 多建一個 一共是兩個 執行老師這個程式 執行學生這個程式 ,旁邊還有一個選擇是哪個程式 就可以看到了

結果如圖所示