Java网络编程UDP实现消息发送及聊天

网友投稿 341 2022-10-14


Java网络编程UDP实现消息发送及聊天

TCP可以实现聊天,UDP也可以实现消息发送及聊天。不同的是,TCP需要有服务端和客户端的连接,但UDP不需要,只需要有发送方和接收方即可。

一、实现消息发送

发送方:

package com.kuang.lesson03;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

//不需要连接服务器

public class UdpSenderDemo01 {

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

//1、建议一个Socket

DatagramSocket socket = new DatagramSocket();

//2、建立包

String msg = "你好啊,服务器!";

InetAddress localhost = InetAddress.getByName("localhost");

int port = 9090;

//数据、数据的长度起始,要发送给谁

DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);

//3、发送包

socket.send(packet);

//4、关闭流

socket.close();

}

}

接收方:

package com.kuang.lesson03;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

// 不是服务端,但是还是要等待客户端的连接。

// 也就是说只有存在这个才能获得客户端发来的消息

public class UdpReceiveDemo01 {

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

//开放端口

DatagramSocket socket = new DatagramSocket(9090);

//接收数据包

byte[] buffer = new byte[1024];

DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);

socket.receive(packet);//阻塞接收

System.out.println(packet.getAddress().getHostAddress());

System.out.println(new String(packet.getData(),0,packet.getLength()));

//关闭连接

socket.close();

}

}

运行结果:

1、启动接收方开放端口,可以看到一直在运行,也就是在等待消息发来。

2、启动发送方,可以看到运行结束,说明消息已发送

3、查看接收方,收到消息。

既然UDP能实现消息发送,那么也可以实现聊天。

二、实现聊天

发送方:

package com.kuang.chat;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

import java.net.SocketException;

public class UdpSenderDemo01 {

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

DatagramSocket socket = new DatagramSocket(8888);

//准备数据,控制台读取System.in

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

while (true) {

String data = reader.readLine();

byte[] datas = data.getBytes();

DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));

socket.send(packet);

if (data.equals("bye")) {

break;

}

}

socket.close();

}

}

接收方:

package com.kuang.chat;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

public class UdpReceiveDemo01 {

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

DatagramSocket socket = new DatagramSocket(6666);

while (true) {

//准备接收数据

byte[] container = new byte[1024];

DatagramPacket packet = new DatagramPacket(container,0,container.length);

socket.receive(packet);//阻塞式接受包裹

//断开连接 bye

byte[] data = packet.getData();

String receiveData = new String(data,0,data.length);

System.out.println(receiveData);

if (receiveData.equals("bye")) {

break;

}

}

socket.close();

}

}

运行结果:

1、先启动接收方

2、启动发送方

3、在发送方控制台输入信息并回车

4、查看接收方,可以看到信息

这里只实现了单方面的发送,单方面的接收,要实现双方的聊天

请看:【Java】网络编程UDP 实现多线程在线聊天


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:技术分享| Sip与WebRTC互通-SRProxy开源库讲解
下一篇:混合双向无线传输装置助力智能工厂建设
相关文章

 发表评论

暂时没有评论,来抢沙发吧~