Java使用UDP聊天程序
生活随笔
收集整理的這篇文章主要介紹了
Java使用UDP聊天程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要想測試Java UDP通信。Java UDP使用DatagramSocket和DatagramPacket完成UDP通信
主要思路:
1.本機通信,ip地址為:127.0.0.1
2.開一個線程監聽一個端口
3.向端口發送消息
4.運行程序java ChatWindow desport listenport
ChatWindow.java
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 import java.net.InetSocketAddress; 6 import java.util.Scanner; 7 8 /** 9 * 聊天小程序 10 * 使用UDP進行通信 11 * 開一個線程,監聽一個端口,接收消息 12 * 這里主要用于本機通信,IP為127.0.0.1 13 * 14 * 發送消息正常,接收消息沒反應 15 * @author GXF 16 * 17 */ 18 public class ChatWindow { 19 private int listenPort; //監聽端口 20 private int desPort; //目標端口 21 22 /** 23 * 初始化目的端口和監聽端口 24 * @param desPort 25 * @param listenPort 26 */ 27 public ChatWindow(int desPort, int listenPort){ 28 this.desPort = desPort; 29 this.listenPort = listenPort; 30 31 //啟動監聽線程 32 Thread listenMessageThread = new Thread(new ReceiveMessage()); 33 listenMessageThread.start(); 34 35 System.out.println("程序已啟動,愉快的開始聊天吧!"); 36 //接收用戶輸入的消息 37 Scanner scanner = new Scanner(System.in); 38 while(true){ 39 String message = scanner.nextLine(); 40 sendMessag(message); 41 } 42 } 43 44 /** 45 * 向目的端口發送一個消息 46 * @param message 47 */ 48 public void sendMessag(String message){ 49 //初始化一個socket 50 //設置好數據包 51 //發送消息 52 try { 53 DatagramSocket socketToSendMessage = new DatagramSocket(); 54 byte buff[] = message.getBytes(); 55 DatagramPacket packetToSend = new DatagramPacket(buff, buff.length, InetAddress.getByName("127.0.0.1"), desPort); 56 socketToSendMessage.send(packetToSend); //發送消息 57 socketToSendMessage.close(); //關閉socket 58 } catch (Exception e) { 59 e.printStackTrace(); 60 } 61 } 62 63 64 /** 65 * 監聽端口線程 66 * 實例化一個DatagramSocket,并綁定一個端口進行監聽 67 * @author GXF 68 * 69 */ 70 class ReceiveMessage implements Runnable{ 71 private DatagramSocket listenSocket; 72 private DatagramPacket receivePacket; 73 private byte buff[] = new byte[1024]; 74 @Override 75 public void run() { 76 //init 77 init(); 78 //start 監聽 79 while(true){ 80 try { 81 listenSocket.receive(receivePacket); //接收數據包 82 String receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); 83 System.out.println(receiveMessage); //輸出接收到的消息 84 } catch (IOException e) { 85 e.printStackTrace(); 86 } 87 } 88 89 } 90 91 /** 92 * 對socket,端口,進行初始化 93 */ 94 public void init(){ 95 try { 96 InetSocketAddress serverSocketAddress = new InetSocketAddress(listenPort); 97 listenSocket = new DatagramSocket(serverSocketAddress); 98 receivePacket = new DatagramPacket(buff, buff.length); 99 } catch (Exception e) { 100 e.printStackTrace(); 101 } 102 } 103 } 104 105 public static void main(String[] args) { 106 if(args.length != 2) 107 { 108 System.out.println("usage: java ChatWindow desport listenport"); 109 return; 110 } 111 int desport = Integer.valueOf(args[0]); 112 int listenPort = Integer.valueOf(args[1]); 113 //first is desport, seconde is listenport 114 ChatWindow chatWindow = new ChatWindow(desport, listenPort); 115 116 117 } 118 119 }?
轉載于:https://www.cnblogs.com/luckygxf/p/4929275.html
總結
以上是生活随笔為你收集整理的Java使用UDP聊天程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Headfirst设计模式的C++实现—
- 下一篇: jQuery表单对象属性过滤选择器