java udp socket 聊天室_新手网络编程之UDP实现「实时聊天室」

新手网络编程之UDP实现聊天室

37e44419e91410e2ed9badd94a118ac9.png实时在线互动聊天

上一篇文章我使用了TCP协议实现了一个非常非常简单的聊天,存在客户端和服务端,客户端和服务端必须要相互连接成功才能进行数据传输。(就像“打电话”,接通了才能互相收到语音);

而UDP协议就不同了,它不需要服务端,发出去的文件也不需要确定与对方是否连接成功!(就像发短信,时时刻刻都可以发,无论对方状态如何)。

简介

聊天室最重要的是能够相互发送消息,接收消息,这里就涉及到了多线程技术。

本示例的编写环境是idea,暂未增加图形界面,实现在两个用户端的控制台中实时聊天,当输入“bye”时,控制台将结束运行。

图1:

8203442d3e6225a7739106fd61bbfc81.pnguser2向user1发送数据、收到来自user1

图2:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个简单的Java基于UDP协议实现聊天室程序,可以供你参考: 服务端代码: ``` import java.net.*; import java.io.*; public class UDPServer { public static void main(String args[]) { DatagramSocket aSocket = null; try { aSocket = new DatagramSocket(6789); byte[] buffer = new byte[1000]; System.out.println("Server is running..."); while (true) { DatagramPacket request = new DatagramPacket(buffer, buffer.length); aSocket.receive(request); String requestMessage = new String(request.getData()).trim(); System.out.println("Client : " + requestMessage); String replyMessage = "Server : " + requestMessage; DatagramPacket reply = new DatagramPacket(replyMessage.getBytes(), replyMessage.length(), request.getAddress(), request.getPort()); aSocket.send(reply); } } catch (SocketException e) { System.out.println("Socket: " + e.getMessage()); } catch (IOException e) { System.out.println("IO: " + e.getMessage()); } finally { if (aSocket != null) aSocket.close(); } } } ``` 客户端代码: ``` import java.net.*; import java.io.*; public class UDPClient { public static void main(String args[]) { DatagramSocket aSocket = null; try { aSocket = new DatagramSocket(); InetAddress aHost = InetAddress.getByName("localhost"); int serverPort = 6789; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("Client : "); String requestMessage = br.readLine(); DatagramPacket request = new DatagramPacket(requestMessage.getBytes(), requestMessage.length(), aHost, serverPort); aSocket.send(request); byte[] buffer = new byte[1000]; DatagramPacket reply = new DatagramPacket(buffer, buffer.length); aSocket.receive(reply); String replyMessage = new String(reply.getData()).trim(); System.out.println(replyMessage); } } catch (SocketException e) { System.out.println("Socket: " + e.getMessage()); } catch (IOException e) { System.out.println("IO: " + e.getMessage()); } finally { if (aSocket != null) aSocket.close(); } } } ``` 运行服务端代码后,再运行多个客户端代码即可实现简单的聊天室功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值