Java使用UDP聊天程序
2015-11-02 09:42
465 查看
主要想测试Java UDP通信。Java UDP使用DatagramSocket和DatagramPacket完成UDP通信
主要思路:
1.本机通信,ip地址为:127.0.0.1
2.开一个线程监听一个端口
3.向端口发送消息
4.运行程序java ChatWindow desport listenport
ChatWindow.java
主要思路:
1.本机通信,ip地址为:127.0.0.1
2.开一个线程监听一个端口
3.向端口发送消息
4.运行程序java ChatWindow desport listenport
ChatWindow.java
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Scanner; /** * 聊天小程序 * 使用UDP进行通信 * 开一个线程,监听一个端口,接收消息 * 这里主要用于本机通信,IP为127.0.0.1 * * 发送消息正常,接收消息没反应 * @author GXF * */ public class ChatWindow { private int listenPort; //监听端口 private int desPort; //目标端口 /** * 初始化目的端口和监听端口 * @param desPort * @param listenPort */ public ChatWindow(int desPort, int listenPort){ this.desPort = desPort; this.listenPort = listenPort; //启动监听线程 Thread listenMessageThread = new Thread(new ReceiveMessage()); listenMessageThread.start(); System.out.println("程序已启动,愉快的开始聊天吧!"); //接收用户输入的消息 Scanner scanner = new Scanner(System.in); while(true){ String message = scanner.nextLine(); sendMessag(message); } } /** * 向目的端口发送一个消息 * @param message */ public void sendMessag(String message){ //初始化一个socket //设置好数据包 //发送消息 try { DatagramSocket socketToSendMessage = new DatagramSocket(); byte buff[] = message.getBytes(); DatagramPacket packetToSend = new DatagramPacket(buff, buff.length, InetAddress.getByName("127.0.0.1"), desPort); socketToSendMessage.send(packetToSend); //发送消息 socketToSendMessage.close(); //关闭socket } catch (Exception e) { e.printStackTrace(); } } /** * 监听端口线程 * 实例化一个DatagramSocket,并绑定一个端口进行监听 * @author GXF * */ class ReceiveMessage implements Runnable{ private DatagramSocket listenSocket; private DatagramPacket receivePacket; private byte buff[] = new byte[1024]; @Override public void run() { //init init(); //start 监听 while(true){ try { listenSocket.receive(receivePacket); //接收数据包 String receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println(receiveMessage); //输出接收到的消息 } catch (IOException e) { e.printStackTrace(); } } } /** * 对socket,端口,进行初始化 */ public void init(){ try { InetSocketAddress serverSocketAddress = new InetSocketAddress(listenPort); listenSocket = new DatagramSocket(serverSocketAddress); receivePacket = new DatagramPacket(buff, buff.length); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { if(args.length != 2) { System.out.println("usage: java ChatWindow desport listenport"); return; } int desport = Integer.valueOf(args[0]); int listenPort = Integer.valueOf(args[1]); //first is desport, seconde is listenport ChatWindow chatWindow = new ChatWindow(desport, listenPort); } }
相关文章推荐
- "XX cannot be resolved to a type "eclipse报错及解决说明
- java中怎么解决路径中文的问题
- Java数组课程作业
- java serializable序列化的作用
- 彻底解决Spring MVC 中文乱码 问题
- maven springmvc spring data jpa hibernate sqlserver demo
- java transient 和Volatile关键字
- Spring MVC全局异常处理与拦截器校检
- Java 8 - 20 Examples of Date and Time API Read mo
- Spring整合Mybatis
- JAVA学习5_Java NIO 报java.nio.charset.MalformedInputException: Input length = 1异常
- 利用idea环境进行Spring框架的使用和体验
- 举例详解Java编程中HashMap的初始化以及遍历的方法
- Java 多态
- Java编码问题
- Java关键字final
- 从校园到工作的路(五)————java中的类型转换
- Java的内部类
- Spring rest 启动报错的一种可能性
- 去除 MyEclipse updating index