# 局域网网络测试程序 **Repository Path**: gyjchonga/lan-network-test-program ## Basic Information - **Project Name**: 局域网网络测试程序 - **Description**: 基于TCP或UDP,以PC端作为服务器,Android作为客户端而建立的网络测试程序,测量内容包括网络延迟、网络吞吐量以及网络丢包率 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-03-03 - **Last Updated**: 2021-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 局域网网络测试程序 #### 介绍 基于TCP或UDP,以PC端作为服务器,Android作为客户端而建立的网络测试程序,测量内容包括网络延迟、网络吞吐量以及网络丢包率 网络延迟和吞吐量的测量(TCP和UDP): 1、服务器(PC)建立套接字,通过阻塞accept等待客户端与其连接; 2、客户端(Android)用户输入目的IP以及端口号,通过connect函数与服务器连接,并向服务器发出开始测量的信号,并记录发包时间t0; 3、服务器与客户端建立连接并接收到开始信号,向客户端返回接收信号; 4、客户端接收到接收信号,并记录时间t1,由t1-t0计算得到网络延迟,并建立三个子线程,分别向服务器发送另一个开始信号,用于测量吞吐量; 5、服务器接收到客户端子线程的连接,也根据三个socket会话建立三个子线程,接收到开始信号之后,在一段时间内向客户端发送大量包; 6、客户端接收服务器发来的包并统计其大小,与时间间隔相除获得当前网络吞吐量; 7、重复上述工作十次,获取十分数据并绘制柱状图,实现数据的可视化。 网络丢包率的测量(UDP): 1、重复上述步骤,在上述第4步中,由于UDP本身不具备拥塞控制,因此需要服务器自己限定发包速率,并让三个线程分别统计自己在这段时间内发了多少包,当发包结束之后,服务器三个线程分别将自己统计的发包数量发送给客户端; 2、客户端接收到服务器发来的数值之后,与自身接收到的数量进行计算,从而得到丢包率; 3、重复十次,绘制柱状图。 注意事项: 1、Android开发中,主线程不能用来进行套接字操作,因此选择使用了异步线程进行测量过程中客户端的第一步,也就是建立套接字并与服务器相连接; 2、子线程不能进行ui操作,因此需要线程之间的通信来完成测量状态的实时更新,而异步线程恰好自带与主线程的循环,因此在更新ui时较为方便; 3、UDP测速中,如果采用阻塞式套接字,由于丢包率的存在,并不能保证发送的开始以及结束信号被收到,而如果发送的信号没有被接收到,线程可能就会阻塞在此出不再继续运行,导致程序停滞,所以应当采用非阻塞式套接字,设置时限进行循环接受,配合另一端的循环发送来达到正常开始测速的目的。