java编程 利用UDP方式,客户端向服务器发送三边值,服务器,根据三边值计算三角形面积返回客户端

java编程 利用UDP方式,客户端向服务器发送三边值,服务器,根据三边值计算三角形面积返回客户端,第1张

创建两个类 分别添加main方法 一个作为server类一个作为client类

客户端先发送再接收  服务器端先接收再发送

下面给你一个server和client的例子 你在基础上改一下就行了

client发送的时候发送三边值  server接收后 写一个计算三角形面积的函数 把接收到的三边值传入函数计算出结果作为数据返回到client端

/**

 *UDPServer

 */

import java.io.*

import java.net.*

class UDPServer{

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

        DatagramSocket  server = new DatagramSocket(5050)

        byte[] recvBuf = new byte[100]

        DatagramPacket recvPacket 

            = new DatagramPacket(recvBuf , recvBuf.length)

        server.receive(recvPacket)

        String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength())

        System.out.println("Hello World!" + recvStr)

        int port = recvPacket.getPort()

        InetAddress addr = recvPacket.getAddress()

        String sendStr = "Hello ! I'm Server"

        byte[] sendBuf

        sendBuf = sendStr.getBytes()

        DatagramPacket sendPacket 

            = new DatagramPacket(sendBuf , sendBuf.length , addr , port )

        server.send(sendPacket)

        server.close()

    }

} /**

 *UDPClient

 */

import java.io.*

import java.net.*

class UDPClient{

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

        DatagramSocket client = new DatagramSocket()

        

        String sendStr = "Hello! I'm Client"

        byte[] sendBuf

        sendBuf = sendStr.getBytes()

        InetAddress addr = InetAddress.getByName("127.0.0.1")

        int port = 5050

        DatagramPacket sendPacket 

            = new DatagramPacket(sendBuf ,sendBuf.length , addr , port)

        client.send(sendPacket)

        byte[] recvBuf = new byte[100]

        DatagramPacket recvPacket

            = new DatagramPacket(recvBuf , recvBuf.length)

        client.receive(recvPacket)

        String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength())

        System.out.println("收到:" + recvStr)

        client.close()

    }

}

对一个连接而言,若能够了解端点间的传输往返时间(RTT,Round Trip Time),则可根据RTT来设置一合适的RTO。显然,在任何时刻连接的RTT都是随机的,无法事先预知。TCP通过测量来获得连接当前RTT的一个估计值,并以该RTT估计值为基准来设置当前的RTO。自适应重传算法的关键就在于对当前RTT的准确估计,以便适时调整RTO。

为了搜集足够的数据来精确地估算当前的RTT,TCP对每个报文都记录下发送出的时间和收到的确认时间。每一个(发送时间,确认时间)对就可以计算出一个RTT测量值的样本(Sample RTT)。TCP为每一个活动的连接都维护一个当前的RTT估计值。该值是对已经过去的一个时间段内该连接的RTT了两只的加权平均,并作为TCP对连接当前实际的RTT值的一种估计。RTT估计值将在发送报文段时被用于确定报文段的RTO。为了保证它能够比较准确地反应当前的网络状态,每当TCP通过测量获得了个新的RTT样本时,都将对RTT的估计值进行更新。不同的更新算法或参数可能获得不同的特性。

最早的TCP曾经用了一个非常简单的公式来估计当前网络的状况,如下

R<-aR+(1-a)MRTP=Rb其中a是一个经验系数为0.1,b通常为2。注意,这是经验,没有推导过程,这个数值是可以被修改的。这个公式是说用旧的RTT(R)和新的RTT (M)综合到一起来考虑新的RTT(R)的大小。但又可以看到,这种估计在网络变化很大的情况下完全不能做出“灵敏的反应”,于是就有下面的修正公式:

Err=M-AA<-A+gErrD<-D+h(|Err|-D)RTO=A+4D,这个递推公式甚至把方差这种统计概念也使用了进来,使得偏差更加的小。而且,必须要指出的是,这两组公式更新,都是在 数据成功传输的情况下才进行,在发生数据重新传输的情况下,并不使用上面的公式进行网络估计,理由很简单,因为程序已经不在正常状态下了,估计出来的数据 也是没有意义的。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/228674.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存