• 20172304 实验三《Python程序设计》实验报告


    20172304 2019-2020-2 《Python程序设计》实验3报告

    课程:《Python程序设计》
    班级:1723
    姓名:段志轩
    学号:20172304
    实验教师:王志强
    实验日期:2020年5月16日
    必修/选修: 公选课

    1.实验内容

    创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

    2. 实验过程及结果

    先引入socket 库,随后还需要sys等,由于这里使用的是base64加密,所以需要引入base64库进行加密。准备工作做完了,就开始建立连接了。建立连接时要找出没有被占有的端口,否则无法连接。同时还要找到可使用的IP地址连接完毕后就可以传输文件了。

    客户端代码:

    import socket
    import sys
    import base64
    
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(('127.0.0.1', 9001))
    except socket.error as msg:
        print(msg)
        sys.exit(1)
    print(s.recv(1024).decode())
    # 需要传输的文件路径
    filepath = 'C:/Users/24098/Desktop/new_file.txt'
    fp = open(filepath, 'rb')
    data = fp.read(1024)
    
    encodestr = base64.b64encode(data)  #加密--转换成base64编码
    print(encodestr)
    s.send(encodestr)
    # 关闭当期的套接字对象
    s.close()
    

    服务器端代码:

    import socket
    import sys
    import base64
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # 绑定端口为9001
        s.bind(('127.0.0.1', 9001))
        # 设置监听数
        s.listen(10)
    except socket.error as msg:
        print(msg)
        sys.exit(1)
    print('Waiting connection...')
    conn, addr = s.accept()
    print('Accept new connection from {0}'.format(addr))
    # 收到请求后的回复
    conn.send('Hi, Welcome to the server!'.encode('utf-8'))
    fp = open('./' + "new_file.txt", 'wb')
    print('start receiving...')
    
    # 将分批次传输的二进制流依次写入到文件
    data = conn.recv(1024)
    decodestr = base64.b64decode(data)  #解密
    print(decodestr)
    fp.write(decodestr)
    fp.close()
    print('end receive...')
    # 传输结束断开连接
    conn.close()
    

    运行结果:

    3. 实验过程中遇到的问题和解决过程

    之前做过类似实验,所以此次实验并没有出什么大的差错。

    其他(感悟、思考等)

    本次实验做的是使用python进行socket编程要想熟练运用python必须多实践,多编写代码,这样运用起来就轻松很多。当然,做实验前还需要把每个细节弄清楚,弄明白,实验后,还要复习,思考,这样印象深刻,记得才牢固。通过这次实验我学到了不少知识,更重要的事,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅。

  • 相关阅读:
    asp.net——Ajax与ashx异步请求的简单案例
    【转载】ADO.NET与ORM的比较(2):NHibernate实现CRUD
    【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD
    STM32 IO口重映射
    keil集成开发环境下,编译stm32f103的工程,bug总结
    [转载]轻松玩转LCD12864-基于AVR单片机的LCD12864串行显示
    头文件 INTRINS.H 的用法
    JAVA
    Sublime 使用技巧
    STM32 空操作
  • 原文地址:https://www.cnblogs.com/15248252144dzx/p/12931795.html
Copyright © 2020-2023  润新知