Java使用UDP聊天程序
主要想测试Java UDP通信。Java UDP使用DatagramSocket和DatagramPacket完成UDP通信
主要思路:
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); } }
Java使用UDP聊天程序的更多相关文章
- Java使用TCP聊天程序
前面使用了UDP进行通信的聊天程序 现在做一个用TCP进行通信的聊天程序 原理: ServerSocket Socket 1.开一个线程监听端口,准备接收消息 2.不断接受消息发送到目的端口 P.S. ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- Java网络编程——UDP聊天程序
UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...
- Delphi-网络编程-第一个网络方面作品(UDP聊天程序)
其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵 我以后再改进吧.... 服务端代码: unit Unit1; interface uses Windows, ...
- java Socket Udp聊天
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...
- Java TCP Swing聊天程序
http://www.oschina.net/code/snippet_935786_52805 业余写着玩的,好多功能没实现,有兴趣的可以拿去玩玩.图片大了还上不了,额.下载地址 http: ...
- java实现UDP聊天---转载
import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
要求: 使用UDP协议实现一个聊天程序 代码: 发送端: package UDP聊天程序; import java.io.IOException; import java.net.DatagramPa ...
- Java TCP/UDP网络通信编程
本文转自:http://www.cnblogs.com/cdtarena/archive/2013/04/10/3012282.html 网络应用中基本上都是TCP(Transmission Cont ...
随机推荐
- 通过 js 修改 html 的文本内容或者样式
通过 js 修改 html 的文本内容 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- 【ARC080F】Prime Flip 差分+二分图匹配
Description 有无穷个硬币,初始有n个正面向上,其余均正面向下. 你每次可以选择一个奇质数p,并将连续p个硬币都翻转. 问最小操作次数使得所有硬币均正面向下. Input 第一行 ...
- 【ARC083E】Bichrome Tree 树形dp
Description 有一颗N个节点的树,其中1号节点是整棵树的根节点,而对于第ii个点(2≤i≤N)(2≤i≤N),其父节点为PiPi 对于这棵树上每一个节点Snuke将会钦定一种颜色(黑或白), ...
- how to use windows azure market
here is the sample. namespace USCrime2006and2007 { class Program { static void Main(string[] args) { ...
- 有关unixODBC:Data source name not found, and no default driver specified的问题
还是昨天测试postgresql的有关Mirroring Controller的功能时出的问题(真TM是个坑). 首先说下环境: 操作系统平台:RHEL6 x86_64 unixODBC版本:2.3. ...
- 品味ZooKeeper之Watcher机制_2
品味ZooKeeper之Watcher机制 本文思维导图如下: 前言 Watcher机制是zookeeper最重要三大特性数据节点Znode+Watcher机制+ACL权限控制中的其中一个,它是zk很 ...
- Qt 学习之路 2(43):QStringListModel
Qt 学习之路 2(43):QStringListModel 豆子 2013年2月13日 Qt 学习之路 2 38条评论 上一章我们已经了解到有关 list.table 和 tree 三个最常用的视图 ...
- PHP 生成随机数组
/** 生成指定个数,以及最小最大值随机数组(包括最大值) * @parem $min 随机数组最小值 * @parem $max 随机数组最大值 * @parem $num 随机数组个数,默认max ...
- ElementUI 时间控件
<template> <div class="block"> <span class="demonstration">默认& ...
- vm12下Centos6的javaweb环境搭建
配置linux的javaweb环境之前: 1.在windows安装xshell(非必需,但是推荐) 2.在linux安装Linux与windows文件传输工具RZSZ[root@192 ~]# yum ...