利用UDP实现双向聊天系统

本文详细介绍了如何使用Java的UDP协议实现双向聊天系统。通过讲解服务器端和客户端的交互方式、收发信息的机制,展示了UDP不同于TCP的无连接特性。文中还提供了服务器端和客户端的代码示例,帮助读者理解UDP聊天程序的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java笔记:《Java语言程序设计》–郭克华

案例介绍

  UDP是面向无连接的,但并不是没有客户端和服务端的区别。只是说,服务端运行之后,并不一定要等待客户端的连接才能通信,客户端可以直接和服务端通信,发送信息。
  这里介绍一个聊天应用最基本的程序:客户端和服务器相同,都可以给对方发送信息,也能够自动接收对方发过来的信息。本程序效果如图所示。
  这里写图片描述      这里写图片描述
  “服务器端”和“客户端”对话框中都有一个文本框,输入聊天信息。输入聊天信息之后,单击“发送”按钮,就能够将信息发送给对方,对方也能够自动收到之后显示。
  显然这个程序在利用TCP实现双向聊天博客中也有介绍,阅读本篇博客之后,可以比较两者之间的差异

服务器和客户端是如何交互的

  在聊天程序中,各聊天的界面叫做客户端,客户端之间如果要相互聊天,则可以将信息先发送到服务器端,然后由服务器端转发。因此,客户端先要连接到服务器。客户端连接到服务器的IP地址和端口。在服务器端,必须监听某个端口。在客户端,必须连接服务器的某个端口,这点没有太大区别。
  1.服务端怎样打开并监听端口?
  UDP编程中,端口的监听是由java.net.DatagramSocket进行管理的,打开java.net.DatagramSocket的文档,这个类有很多构造函数,最常见的构造函数为:
  public DatagramSocket(int port) throws SocketExceptin
  传入一个端口号,实例化DatagramSocket。
  ps:实例化DatagramSocket,就已经打开了端口号并进行监听。
  例如,如下代码就可以监听服务器上的9999端口,并返回连接对象ds。
  DatagramSocket ds=new DatagramSocket(9999);
  2.客户端是怎样连接到服务器端的某个端口?
  客户端连接到服务器端的某个端口也是由java.net.DatagramSocket进行管理的,打开java.net.DatagramSocket的文档,里面有一个重要函数:
  public void connect(InetAddress address,int port)
  传入一个封装了服务器IP地址的InetAddress对象和端口号。
  ps:java.net.InetAddress有一个函数:

public static InetAddress getByName(String host) throws UnknownHostException

这是一个静态函数,可以传入一个IP地址,返回InetAddress对象。
例如,如下代码就可以连接服务器218.197.118.80上的9999端口。

DatagramSocket ds=new DatagramSocket();
InetAddress add=InetAddress.getByteName("218.197.118.80");
ds.connect(add,9999);

  特别提醒
  到这里为止,会发现这岂不是和TCP编程一样?是的,看起来一样,但是本质却不一样。在TCP编程中,接下来的工作就是服务器要获得客户端的连接,然后通过这个连接来进行通信。但是,在UDP编程中,这个工作不要了!就可以直接通信了!也就是说,服务器端不需要获得客户端的连接,它们就直接通过地址来收发信息。因此服务器不需要知道客户端是否连上来了。或说的更加直接一些,客户端以下代码:

InetAddress add=InetAddress.getByName("218.197.118.80");
ds.connect(add,9999)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值