计算机网络-基础编程实验(JAVA\Python3)

这篇具有很好参考价值的文章主要介绍了计算机网络-基础编程实验(JAVA\Python3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

计算机网络-网络基础编程实验(JAVA\Python3)

一.实验目的

        通过本实验,学习采用Socket(套接字)设计简单的网络数据收发程序,理解应用数据包是如何通过传输层进行传送的。

二.实验内容

学习套接字编程,完成以下的网络数据收发程序。

1.采用TCP进行数据发送的简单程序

2.采用UDP进行数据发送的简单程序

3.多线程/线程池对比

4.简单的chat程序,并能实现互传文件

三.实验过程

        使用python语言进行网络数据收发程序的实现。在本机建立客户端和服务器程序,服务器IP使用127.0.0.1。

1.采用TCP进行数据发送的简单程序

客户端:

     声明服务器名和端口,通过套接字建立TCP连接。连接建立后向服务器发送一个字符串,等待接收服务器的字节,接收到回车符结束后,关闭客户的套接字,客户和服务器之间的TCP连接也会关闭。

计算机网络-基础编程实验(JAVA\Python3)

 服务器端:

     服务器同样需要创建套接字,并将这个创建的套接字和端口绑定,该套接字将监听来自客户的TCP连接请求。当客户发起连接请求后,服务器会创建一个新的套接字,由客户专用。使用新的套接字,服务器就可以和客户通过TCP连接进行通信了。

计算机网络-基础编程实验(JAVA\Python3)

         运行服务器程序和客户端程序,可以进行通信:

计算机网络-基础编程实验(JAVA\Python3)

计算机网络-基础编程实验(JAVA\Python3)

2.采用UDP进行数据发送的简单程序

客户端:

        基本与TCP相同,区别是不需要建立连接,发送数据时需要指明服务器名和端口。

计算机网络-基础编程实验(JAVA\Python3)

 服务器:

        与TCP相比,不需要欢迎套接字,也不需要监听客户端的连接请求,直接对接收到的数据进行处理,并通过套接字向客户端发送数据。

计算机网络-基础编程实验(JAVA\Python3)

3.多线程/线程池对比

(1)多线程/线程池的对比

        当有多个客户端向服务器发起请求时,服务器只能逐个处理客户端的请求,在处理某个客户端的请求时,不会对其他客户的请求作出响应。采用并行服务器的方式,每个连接单独处理,不产生干扰,实现并行服务的方式有两种,一种是为每个客户创建一个线程,另一种是使用线程池。

        为每个客户都创建一个新的线程,每个新线程都要消耗系统资源。当客户较多时,线程数逐渐增加,消耗的资源也越来越多。且系统需要对线程进行管理,并处理线程之间的上下文切换。在客户较多的情况下,使用多线程处理客户的请求可能实际上增加了客户端总服务时间。

        为了解决线程过多的问题,可以对总线程数进行限制,并重复使用线程。在服务器启动时创建一个由固定数量线程池组成的线程池,当收到一个客户端的连接请求,就将处理请求的任务交给线程池中的一个线程处理,处理结束后该线程将返回线程池。如果连接请求到达服务器时没有可用线程,请求将在队列中等待空闲的线程。

        以下用Python语言实现多线程和使用线程池的服务器。尝试服务器程序实现多线程/线程池,需要先了解Python中的多线程及线程池。

(2)Python中的多线程

        Python中的threading模块用于支持多线程的操作。使用该模块可以创建线程,并查看已有线程的状态。线程可分为守护线程和非守护线程。

        守护线程:守护线程和主线程一起运行,主线程销毁,守护线程会和主线程一起销毁。

        非守护线程:主线程销毁,非守护线程继续运行,不受影响。

        创建线程时可以设定线程为守护线程。线程运行后,threading模块提供了一些方法支持多线程。如线程阻塞方法,用于实现同步与互斥的锁,条件变量,信号变量等。

(3)线程池

        Python中concurrent.futures库中的ThreadPoolExecutor类可以实现线程池。

  • ThreadPoolExecutor构造实例时,通过传入max_workers参数来设置线程池中最多能同时运行的线程数。
  • 通过submit()方法提交线程需要执行的任务到线程池,返回该任务的句柄。
  • done()方法可以判断任务是否结束,cancel()方法可以取消提交的任务,在线程池中已经运行的任务不可以取消。result()方法可以获取任务的返回值,这个方法是阻塞的。

(5)采用多线程的服务器程序

        采用为每一个客户创建一个单独的线程服务,通过以上提到过的threading模块实现,具体实现如下:

计算机网络-基础编程实验(JAVA\Python3)

        使用多线程的客户端发起连接请求,运行程序:

计算机网络-基础编程实验(JAVA\Python3)

 (6)采用线程池的服务器程序

        使用上述ThreadPoolExecutor创建一个可最多运行5个线程的线程池来对客户进行服务,具体实现如下:

计算机网络-基础编程实验(JAVA\Python3)

       运行程序,前三个请求是线程池中的三个线程同时处理完成的,三个请求处理完毕后,其中的两个线程又处理后两个请求。

计算机网络-基础编程实验(JAVA\Python3)

 4.可实现互传文件的简单chat程序

        进行对话和互传文件的处理有所不同,因此先进行约定,客户端如果要发送或上传文件,输入的指令格式应该为[download/upload 文件路径],客户端确认消息类型为请求上传或下载文件,发送请求[download|文件路径]或[upload|文件名|文件大小],服务器收到消息后得知需要上传或下载文件,进行相应的回应(下载文件时回应[文件名|文件大小],上传时回应准备好上传),当双方都做好准备后,开始进行发送。

        进行上传文件时,首先需要确认客户端给出的文件是否存在。如果文件存在,读取文件名和文件大小,并按照[upload|文件名|文件大小]的格式向服务器发送upload请求,服务器接收到请求后,拼接好文件的接收路径,创建文件,然后向客户端发送准备好接收文件的消息。客户端收到消息后,就可以开始读取文件,每次读取2048字节,并向服务器发送,服务器接收到后就将数据写入文件,直到文件大小的数据全部接收到。

客户端的部分代码如下:

计算机网络-基础编程实验(JAVA\Python3)

 服务器接收文件的代码如下:

计算机网络-基础编程实验(JAVA\Python3)

         下载文件的过程与接收文件类似,区别在于客户端需要先把文件名发送给服务器,服务器确认文件是否存在,如果文件存在,再进行类似上述上传文件的过程。

客户端下载文件的代码如下:

计算机网络-基础编程实验(JAVA\Python3)

 服务器传输文件的代码如下:

计算机网络-基础编程实验(JAVA\Python3)

         服务器程序采用(3)中编写的线程池服务器,运行程序,将client的文件a.txt上传到服务器,将服务器的b.docx文件下载到client的文件夹中。

客户端:

计算机网络-基础编程实验(JAVA\Python3)

 服务器:

计算机网络-基础编程实验(JAVA\Python3)

         传输结束后,可以在客户和服务器的文件夹client和server中找到下载/上传的文件。程序实现了文件互传的功能。

四.实验总结

        通过本实验,学习了采用Socket(套接字)设计简单的网络数据收发程序,并编写了UDP数据发送程序和TCP数据发送程序,熟悉了使用Socket编程的基本方法。了解了服务器的多线程实现和线程池实现方式,并进行简单的实现。通过编写能传输文件的客户-服务器程序,加深了对于客户-服务器文件传输过程的理解。 文章来源地址https://www.toymoban.com/news/detail-428054.html

到了这里,关于计算机网络-基础编程实验(JAVA\Python3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络】socket编程基础

    因特网上的每台计算机都有一个唯一的IP地址,如果一台主机上的数据要传输到另一台主机,那么对端主机的IP地址就应该作为该数据传输时的目的IP地址。但仅仅知道目的IP地址是不够的,当对端主机收到数据后,对端还需要对该主机作出相应,因此对端主机也需要发送数据

    2024年02月15日
    浏览(52)
  • 计算机网络套接字编程实验-TCP多进程并发服务器程序与单进程客户端程序(简单回声)

    1.实验系列 ·Linux NAP-Linux网络应用编程系列 2.实验目的 ·理解多进程(Multiprocess)相关基本概念,理解父子进程之间的关系与差异,熟练掌握基于fork()的多进程编程模式; ·理解僵尸进程产生原理,能基于|sigaction()或signal(),使用waitpid()规避僵尸进程产生; ·

    2024年02月12日
    浏览(47)
  • 计算机网络套接字编程实验-TCP单进程循环服务器程序与单进程客户端程序(简单回声)

    1.实验系列 ·Linux NAP-Linux网络应用编程系列 2.实验目的 ·理解并掌握在程序运行时从命令行读取数据的C语言编程方法; ·理解并掌握基于命令参数设置并获取IP与Port的C语言编程方法; ·理解并掌握套接字地址的数据结构定义与地址转换函数应用; ·理解并掌握网络字节序

    2024年02月11日
    浏览(97)
  • 计算机网络 实验指导 实验17

    Table PC0 和 Table PC1 最开始可能还会连Access Point0,无影响后面会改 名称 接口 IP地址 网关地址 Router0 fa0/0 210.10.10.1 fa0/1 220.10.10.2 Tablet PC0 210.10.10.11 Tablet PC1 210.10.10.12 Wireless 互联网 220.10.10.2 LAN 192.168.0.1 PC0 0/1 192.168.0.10 192.168.0.1 PC1 192.168.0.11 192.168.0.1 PC2 192.168.0.12 192.168.0.1 Access p

    2024年04月15日
    浏览(70)
  • 计算机网络实验六 综合设计实验

    1.掌握因特网的配置相关工作 1.构建一个如下图3所示拓扑图(或简化图,去掉R4); 图3 网络互联拓扑图 2.要求PC1和PC3 是同一单位内部的不同子网(例如B类网络的两个子网); 3.要求PC1、PC2、PC3、PC4、PC5、PC6能够互相ping通; 4.要求PC1通过在浏览器中输入WWW服务器的域名对其

    2024年02月12日
    浏览(60)
  • 计算机网络三个 实验

    目录 实验一 ipconfig 实作一 实作二 ping 实作一 实作二 tracert 实作一 实作二 ARP 实作一 实作二 实作三 DHCP 实作一 netstat 实作一 实作二 DNS 实作一 实作二 实作三 cache 实作一 实作二 实验二 准备 数据链路层 实作一 熟悉 Ethernet 帧结构 实作二 了解子网内/外通信时的 MAC 地址 实作

    2024年02月09日
    浏览(60)
  • 计算机网络实验

    自己计算机网络配置 ipconfig /all ​ 物理地址. . . . . . . . . . . . . : 00-E0-4C-68-04-91 IPv4 地址 . . . . . . . . . . . . : 10.60.55.199(首选) 子网掩码 . . . . . . . . . . . . : 255.254.0.0 默认网关. . . . . . . . . . . . . : 10.60.255.254 别人计算机网络配置 ipconfig /all ​ 物理地址. . . . . . . . . . . . . : 2C-F0-

    2024年01月16日
    浏览(48)
  • 计算机网络实验作业

    实验内容 1. 领取水晶头、网线、网线钳等,制作网线。利用测线仪测试制作好的网线是否正常? 正常 2. 双绞线分成非屏蔽双绞线和(屏蔽双绞线  ),(  屏蔽双绞线 )的屏蔽效果好,( 非屏蔽双绞线  )的价格便宜。 3. 根据绞合的密度区分不同类别的双绞线,如

    2024年02月06日
    浏览(67)
  • 计算机网络 实验二

    ⭐计网实验专栏,欢迎订阅与关注! ★观前提示 :本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 (1)掌握IP地址的基本结构(网络部分与主机部分的区分) (2)掌握子网掩码的含义 (3)掌握IP包的组成格

    2023年04月17日
    浏览(58)
  • 计算机网络实验(4)--配置网络路由

    了解路由器的特点、基本功能及配置方法;使用模拟软件Packet Tracer 5.3熟悉Cisco路由器的操作;配置静态路由和距离矢量路由协议RIP,实现给定网络的连通;从而加深对IP编址、路由转发机制、路由协议、路由表的建立等的认识。 在模拟软件中建立如下网络拓扑,进行IP编址,

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包