利用UDP实现双向聊天系统

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)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于UDP(User Datagram Protocol)实现双向可靠通信需要借助一些机制和算法来确保数据的可靠传输。 首先,双向通信意味着通信的双方都可以发送和接收数据。每个通信实体都需要创建一个UDP Socket,并且绑定相应的IP地址和端口。这样,双方可以互相发送和接收数据。 其次,可靠传输需要使用一些机制来确保数据的完整性和准确性。一种常见的机制是使用序号和确认机制。发送方将数据分割成小的数据包,并为每个数据包添加一个唯一的序号。接收方收到数据包后发送一个确认消息给发送方,确认接收到该数据包。如果发送方没有收到确认消息,它会认为数据包丢失,然后重新发送该数据包。 此外,超时重传机制也是保证数据可靠传输的重要手段。发送方在发送完一个数据包后会启动一个定时器。如果在特定的时间内未收到确认消息,发送方会重新发送数据包,直到收到确认消息或达到最大重传尝试次数。 还可以使用拥塞控制算法来避免网络拥塞。当网络拥塞时,发送方可以降低发送速率,以避免丢包和延迟。 在双向通信中,双方需要相互交流,因此可以采用双工通信模式。双工通信允许双方同时发送和接收数据,这样可以更高效地完成通信。 总结来说,基于UDP实现双向可靠通信需要使用序号和确认机制、超时重传机制、拥塞控制算法和双工通信模式。这些机制和算法的结合可以有效地保证数据的可靠传输和双方通信的顺畅进行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值