Java中使用UDP实现简单的聊天功能

通过DatagramSocket类来实现。此类表示用来发送和接收数据报包的套接字。

发送端代码如下:

 2
 3 import java.io.IOException;
 4 import java.net.*;
 5 import java.util.Scanner;
 6
 7 public class Send implements Runnable{
 8     @Override
 9     public void run() {
10         //创建一个发送消息的套接字
11         DatagramSocket sendSocket = null;
12         try {
13             sendSocket = new DatagramSocket();
14         } catch (SocketException e) {
15             e.printStackTrace();
16         }
17         while (true) {
18             try {
19                 System.out.println("发送端发送消息");
20                 Scanner sc = new Scanner(System.in);
21                 String msg = sc.next();
22
23                 byte [] bytes = msg.getBytes();//发送的内容转化为字节数组
24                 InetAddress ip = InetAddress.getByName("192.168.31.169");//接受内容的Ip地址
25
26                 //创建要发送的数据包,然后用套接字发送
27                 DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,ip,8080);
28                 //用套接字发送数据包
29                 sendSocket.send(datagramPacket);
30
31             } catch (SocketException e) {
32                 e.printStackTrace();
33             } catch (UnknownHostException e) {
34                 e.printStackTrace();
35             } catch (IOException e) {
36                 e.printStackTrace();
37             }
38         }
39     }
40
41     public static void main(String[] args){
42         Send s = new Send();
43         Thread thread = new Thread(s);
44         thread.start();
45     }
46 }

接收端代码如下:

 2
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetAddress;
 7 import java.net.SocketException;
 8
 9 public class Receive implements Runnable {
10     @Override
11     public void run() {
12         System.out.println("接收端");
13         //创建接受消息的套接字
14         DatagramSocket receviceSocket = null;
15         try {
16             receviceSocket = new DatagramSocket(8080);
17         } catch (SocketException e) {
18             e.printStackTrace();
19         }
20         while (true) {
21             try {
22                 byte [] bytes = new byte[2048];
23                 //创建一个数据包来接受消息
24                 DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);
25                 //用套接字接受数据包
26                 receviceSocket.receive(datagramPacket);
27                 //得到发送端的ip地址
28                 InetAddress ip = datagramPacket.getAddress();
29                 //将接受到的消息转换为字符串
30                 String rec = new String(datagramPacket.getData()) ;
31                 System.out.println(ip.getHostAddress()+"发送的消息为:"+rec);
32
33             } catch (SocketException e) {
34                 e.printStackTrace();
35             } catch (IOException e) {
36                 e.printStackTrace();
37             }
38         }
39     }
40
41     public static void main(String[] args) {
42         Receive r = new Receive();
43         Thread thread = new Thread(r);
44         thread.start();
45     }
46 }

因为要一直接受消息和发送消息,故用了while循环。

注意事项:发送端的端口要和接收端的端口保持一致。  

这里我接受消息的ip地址设置为自己的ip地址来演示实际效果。

时间: 2024-07-31 17:36:04

Java中使用UDP实现简单的聊天功能的相关文章

Java中的UDP协议编程

一. UDP协议定义   UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. 二. 使用UDP的原因 它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频.视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包, 也不会对接收结果产生太大影响.比如我们聊天用的ICQ和O

java中Color类的简单总结

java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 public final static Color black = new Color(0,0,0); public final static Color bule = new Color(0,0,255); . . 有很多这样的常量,可供我们直接类名去调用而不需要去实例化. 3.Color中的构造函数 pu

《Java中的自动装箱和拆箱功能.》

1 //Java中的自动装箱和拆箱功能. 2 class AutoboxingUnboxing 3 { 4 public static void main(String[] args) 5 { 6 //直接把一个基本类型变量赋给Interger对象. 7 Integer inObj = 5; 8 Object inObj1 = 6; 9 //直接把一个boolean类型的变量赋给一个Object类型的变量. 10 Object boolObj = true; 11 //直接把Integer对象赋

简单的聊天功能

简单的聊天功能 可以查看附近的人,简单的本地聊天,简单的客户资料. 下载地址:http://www.devstore.cn/code/info/792.html 运行截图:  

Java中的UDP应用

我在<JavaSE项目之聊天室>中通过遵守TCP协议的ServerSocket与Socket实现了聊天室的群聊窗口.同时,在介绍OSI与TCP/IP参考模型时,也曾提及TCP与UDP(全称User Datagram Protocol,用户数据报协议). 总的来说,TCP与UDP的区别有: 1.TCP与UDP的基本区别: (1)TCP基于连接,UDP基于无连接: (2)TCP要求系统资源较多,UDP则较少: (3)UDP程序结构较简单: (4)流模式(TCP)与数据报模式(UDP); (5)TC

Java中基于UDP协议的的网络编程(基础篇)

---恢复内容开始--- 一:什么是网络编程? 通俗的来说, 网络编程就是编写程序,让联网的两个或多个设备(例如计算机)之间进行数据传输.Java语言也支持网络编程,JDK提供的 java.net包提供了很多于网络编程相关的类,来支持网络编程方面的学习. 二:java网络编程所使用的协议? 有了计算机网络的基础,我们不难理解,在java中,网络编程是基于网络传输协议的. java网络编程,可以是基于TCP协议的,也可以基于UDP协议的.那么首先我们得知道tcp协议和udp两种协议的区别. 区别:

android中实现简单的聊天功能

这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~ 主要还是展示RecyclerView控件的使用吧~ 参考我之前写的文章: android中RecyclerView控件的使用 android中使用Nine-Patch图片 1.先添加一个关于聊天内容的Chat.java类: package com.example.chenrui.common; public class Chat { private String targetUser; private String content

Java中多态的一些简单理解

什么是多态 1.面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 2.多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 3.实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 4.多态的作用:消除类型之间的耦合关系. 5.现实中,关于多态的例子不

个人对Java中多态的一些简单理解

什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦合关系. 现实中,关于多态的例子不胜枚举. 下面是多态