• 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 }
  • 相关阅读:
    Android下的多线程
    01背包问题
    用锐捷使你的笔记本成为WIFI基站,让其他电脑还有我们的手机使用无线上网吧
    如何在eclipse的android工程中添加外部javadoc.jar包,方便开发
    umask函数的用处
    支持我一下吧!
    ios越狱内购提示Environment:Sandbox
    plt_System_Security_Cryptography_HMAC_KeySetup_byte___byte
    蛋疼的时候写三消游戏(十二)
    cocos2dx做游戏(搭建环境)
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4929275.html
Copyright © 2020-2023  润新知