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 ...
随机推荐
- [转]Resolving Python error: Unable to find vcvarsall.bat
Resolving Python error: Unable to find vcvarsall.bat While installing python package flask-user usin ...
- Python3之Memcache使用
简介 Memcached是一个高性能的分布式内存对象缓存系统,用于动态WEB应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库网站的速度.Memcached ...
- Java 实现邮件的发送
Java 实现邮件的发送 开发邮箱发送功能必须看邮箱方面的资料 改一些东西 (我的是qq 邮箱哟 开通 POP3 ...
- php 对象的自定义遍历
php对象的自定义遍历 对手册中的案例进行分析 更好的理解foreach() 的遍历步骤 class myIterator implements Iterator { private $positio ...
- Android 文字转语音(TTS)
1.介绍 2.xml文件布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- BZOJ3065 带插入区间K小值 || 洛谷P4278
这是一道让我崩溃的题...... 然鹅洛谷上时限被改然后只有20分......好像所有人都被卡了(雾) 由于替罪羊树不是依靠旋转操作而是依靠暴力重构的方式维护树的平衡,所以我们可以考虑使用替罪羊树套区 ...
- CentOS7 编译安装 php7
更新:2019-01-25 补充:CentOS 7.5 全新编译安装 PHP-7.3.1 ,补充内容接在原文之后 更新:2018-09-29 补充:新系统下编译安装PHP-7.2.5遇到的问题,补充内 ...
- Sasha and a Bit of Relax(前缀异或和+二维数组+思维)
Sasha likes programming. Once, during a very long contest, Sasha decided that he was a bit tired and ...
- Axure8.0
1.Axure的一行三列的基本布局. 2.自适应页面设置,页面设置? 3.自动生成HTML的工具栏使用.生产的目录文件夹的内容. 4.元件的交互(样式修改,显示隐藏) 5.全局变量,钢笔工具的使用
- 对avalonjs的研究
<!DOCTYPE html> <html> <head> <title>第一个avalon项目</title> <meta char ...