udp一对多聊天java_用udp方式进行聊天的java实现. (转)-程序员宅基地

技术标签: udp一对多聊天java  

用udp方式进行聊天的java实现. (转)[@more@]

我最近也在研究用实现oicq。

这是我的客户端的简单实现。

主要是通过udp方式,实现间的对话。

其中运用了序列化类的方法。

以下是,请多提意见。

//发送消息类

Message.java

import java.io.Serializable;

public class Message implements Serializable{

private String msg;

private String id;

private String destid;

public Message(String msg, String id, String destid) {

this.msg = msg;

this.id = id;

this.destid = destid;

}

//获得消息内容

public String getMessage() {

return msg;

}

//获得发送方的ip

public String getID() {

return id;

}

//获得接受方的ip

public String getDestID() {

return destid;

}

}

//接受方

Receiver.java

import java.*;

import java.io.*;

public class Receiver extends Thread {

private Message msg;

private DatagramPacket packet;

private DatagramSocket socket;

private byte[] recvBuf = new byte[500];

public Receiver() {

try{

//创建udp包以接受数据。

packet = new DatagramPacke(recvBuf,recvBuf.length);

//创建接受方的udp端口以接收数据

socket = new DatagramSocket(7002);

}

catch(Exception e){}

}

public void run() {

try {

while(true){

//接受数据

socket.receive(packet);

ByteArrayInputStream byteStream = new

ByteArrayInputStream(recvBuf);

InputStream is = new ObjectInputStream(new

BufferedInputStream(byteStram));

Object o = is.readObject();

msg = (Message)o;

is.close();

System.out.println(msg.getMessage());

}

}

catch(Throwable t) {

t.printStackTrace();

}

}

}

//发送方

Sender.java

import java.net.*;

import java.io.*;

public class Sender extends Thread {

private Message msg;

private DatagramSocket socket;

private DatagramPacket packet;

public Sender(Message msg) {

try {

this.msg = msg;

//获得目的方的

String destID = msg.getDestID();

//获得将要发送的消息内容

String destID = msg.getDestIDString message = msg.getMessage();

ByteArrayOutputStream byteStream = new ByteArrayOutputStream(500);

ObjectOutputStream = new ObjectOutputStream(new

BufferedOutputStream(byteStream));

os.writeObject(msg);

os.flush();

byte[] senuf = byteStream.toByteArray();

//创建udp数据包以发送数据

packet = new  DatagramPacket(sendBuf,sendBuf.length,

Address.getByName(destID),7002);

//创建发送udp套接字,指定套接字口。

socket = new DatagramSocket(7000);

os.close();

}

catch(Throwable t) {

t.printStackTrace();

}

}

public void run() {

try {

//发送消息

socket.send(packet);

//发送完毕关闭套接字。

socket.close();

}

catch(Throwable t) {

t.printStackTrace();

}

}

}

//测试

Udp_Chat.java

import java.io.*;

import java.net.*;

public class UDP_Chat {

public UDP_Chat(String s){

}

public static void main(String args[])throws Exception{

Message a = new Message("阿飞的卡","211.92.155.200" ,"211.92.155.200");

new Sender(a).start();

new Receiver().start();

}

}

参考文章:Java 技巧 40:通过数据报包输送 利用数据报包在网上输送 Java 对象

[email protected]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36251052/article/details/114719801

智能推荐

使用Anime.js的基于JavaScript的动画,第3部分:值,时间轴和播放-程序员宅基地

文章浏览阅读1.2k次。在Anime.js系列的上一教程中,您了解了用于控制应如何对不同目标元素进行动画处理的各种参数。 您还学习了如何使用函数参数逐渐更改元素的延迟或持续时间。 在本教程中,我们将更进一步,学习如何使用常规数字,基于函数的值和关键帧来指定属性值本身。 您还将学习如何使用时间轴顺序播放动画。 指定属性值 Anime.js允许您为目标元素的可设置动画的属性指定最终值或最终值。 动画的初始值或起始..._anime.timeline

【图像融合】一种基于粒子群优化的自适应多光谱图像融合附matlab代码及论文_混合粒子群 融合图像-程序员宅基地

文章浏览阅读119次。1 简介In this paper, a novel image fusion method for remote sensing applications is proposed. In order to estimate the primitive detail map, the band coefficients of multispectral images are computed using least squares method. To refine the detail map a.._混合粒子群 融合图像

Vue图片加载错误、图片加载失败的处理_swipe-vue中 加载图片失败-程序员宅基地

文章浏览阅读1.3k次。Vue图片加载错误、图片加载失败的处理注意:onerror前面要用冒号 :注意看logo定义的格式,符号不要写错了<img :src="pic?pic:'../../assets/placeholder.png'" :onerror="errorImage" alt=""> <script>export default { data() { return { errorImage: 'this.src="' _swipe-vue中 加载图片失败

fprintf用法解析-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏26次。int fprintf ( FILE * stream, const char * format, ... );描述:写格式化的数据流将格式指向的C字符串写入流中。 如果格式包含格式说明符(以%开头的子序列),则格式化后的其他参数将被格式化并插入结果字符串中,替换其各自的说明符。在格式参数之后,函数至少需要格式指定的附加参数。参数:stream指向标识输出流的FIL_fprintf

Hibernate4不自动建表_hibernate 4 自动创建 表-程序员宅基地

文章浏览阅读940次。 hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=create hibernate.show_sql=true h_hibernate 4 自动创建 表

MAC下检查是否安装command line tools 工具_怎么查看mac有没有已安装command-line-tool-程序员宅基地

文章浏览阅读1.6w次。怎样判断「Command Line Tools」是否已经安装了呢?由 Sean.Lv 发布于 2013年10月26日 无人欣赏。升级到OS X Mavericks和Xcode5之后迷茫了,不知道「Command Line Tools」装了没?是否需要单独安装?猜你喜欢:怎样判断「Command Line Tools」是否已经安装了呢?_怎么查看mac有没有已安装command-line-tool

随便推点

如何加速网站访问-程序员宅基地

文章浏览阅读300次。阿里云的全球加速服务:https://help.aliyun.com/document_detail/56607.html?spm=5176.11065259.1996646101.searchclickresult.2cb0905bWpYesT&aly_as=k4U2N5tS移动解析HttpDNShttps://cloud.tencent.com/product/hd?..._如何加速网站访问

Android--使用XMLPull解析xml-程序员宅基地

文章浏览阅读3.3k次。在Android中极力推荐的xmlpull方式解析xml。xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库。 环境: kxml2-2.3.0.jar xmlpull_1_1_3_4c.jar以上两个jar分别从以下网站下载:htt_xmlpull

Unity3D_新版粒子系统_unity3.5之后推出粒子系统新版本的特点-程序员宅基地

文章浏览阅读818次。什么是粒子系统粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。新版粒子系统介绍Shuriken粒子系统是继Unity3.5版本之后推出的新版粒子系统,它采用了模块化管理,个性化的粒子模块配合..._unity3.5之后推出粒子系统新版本的特点

人工智能发展史_人工智能发展史 ppt-程序员宅基地

文章浏览阅读9.1k次,点赞2次,收藏7次。转自 微信公众号 纯洁的微笑人工智能的诞生:1943 - 1956在20世纪40年代和50年代,来自不同领域(数学,心理学,工程学,经济学和政治学)的一批科学家开始探讨制造人工大脑的可能性。1956年,人工智能被确立为一门学科。1956年的夏天,香农和一群年轻的学者在达特茅斯学院召开了一次头脑风暴式研讨会。会议的组织者是马文·闵斯基,约翰·麦卡锡和另两位资深科学家C_人工智能发展史 ppt

Django models存储json格式的数据_django数据库存json-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏9次。JSONField官网介绍用于存储JSON格式数据的字段。在Python中,数据以其Python本机格式表示:字典,列表,字符串,数字,布尔值和None。一个可选的JSON格式类序列化的数据类型不是由标准JSON序列(支持的datetime,uuid等)。例如,您可以使用 DjangoJSONEncoder该类或任何其他json.JSONEncoder子类。JSONField使用..._django数据库存json

AXIS 访问webservice-程序员宅基地

文章浏览阅读385次。第一:先导入axis 的jar 包importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.axis.encoding.XMLType;第二:实际代码String url ="http://ip:1205/ws/OA.asm...