zoukankan      html  css  js  c++  java
  • Python连载53-UDP、TCP、FTP编程实例

    一、服务器程序要求永远运行,一般用死循环来处理

    1.服务器改造版本V03(主程序

    原封不动,这里只修改了运行的程序)
    
     
    
    if __name__ == "__main__":
    
        while True:
    
            try:
    
                print("Start Server")
    
                serverFunc()
    
                print("End Server")
    
            except Exception as e:
    
                print(e)
    
    ​
    
            time.sleep(1)

    二、TCP编程

    1.面向链接的传输,即每次传输之前需要先建立一个实例

    2.客户端和服务端两个程序需要编写

    3.Server端的编写流程

    (1)建立socket负责具体通信,这个socket其实只负责接受对方的请求

    (2)绑定端口和地址

    (3)监听接入的访问socket

    (4)接受访问的socket,可以理解接受访问即建立了一个通讯的链接通路

    (5)接受对方的发送内容,利用接收到的socket接受内容

    (6)如果有必要,给对方发送反馈信息

    (7)关闭链接通路

    4.Client端流程

    (1)建立通信socket

    (2)链接对方,请求跟对方建立通路

    (3)发送内容到对方服务器

    (4)接受对方的反馈

    (5)关闭链接通路

    5.举例

     
    
    import socket
    
    ​
    
    def tcp_srv():
    
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#其哪一个参数为ipv4,后一个参数为TCP固定参数
    
        addr = ("127.0.0.1",8998)#ip地址和端口号
    
    ​
    
        sock.bind(addr)#绑定addr
    
        sock.listen()#监听接入的访问socket
    while True:
    
            #接受访问的socket,可以理解为接受访问即建立一个通讯的链接通路,accept返回的元组第一个元素赋给skt,第二个元素赋给addr
    
            skt,addr = sock.accept()#第一个元素是socket,第一个元素就是发送方的地址
    
            #接受对方的发送内容,利用接受到的socket接受内容
    
            msg = skt.recv(500)#500代表接收使用的buffersize,理解为接受内容的大小
    
            msg = msg.decode()#接受到的是bytes格式内容,想得到str格式的,需要进行解码
    
            #下面三行代表反馈的信息
    
            rst = "Received msg:{0} from {1}".format(msg,addr)
    
            print(rst)
    
            skt.send(rst.encode())
    
            #关闭socket
    
            skt.close()
    
    ​
    
    if __name__ == "__main__":
    
        print("Startint tcp server.......")
    
        tcp_srv()
    
    print("Ending tcp server.........")
    
     
    
     
    import socket
    
    ​
    
    def tcp_clt():
    
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
        addr = ("127.0.0.1",8998)
    
        sock.connect(addr)#链接addr这个地址,建立tcp这个通道
    
        msg = "I am a good man"
    
        sock.send(msg.encode())
    
        rst = sock.recv(500)#接受对方的反馈
    
        print(rst.decode())
    
        sock.close()
    
    ​
    
    if __name__ == "__main__":
    
        tcp_clt()

    解释:先运行了服务器端的程序一次,然后运行了客户端程序四次,可以看到服务器端(端口8998)接收到了四次客户端发来的消息,并且每一次发来消息的端口都不一样,按照升序53256-53259.

    三、FTP编程

    FTP(FileTransferProtocal)文件传输协议

    ​用途:定制一些特殊的上传下载文件的服务

    ​用户分类:登录FTP服务器必须有一个账号

    (1)Real账户​:注册账户

    (2)​Guest账户:可能临时对某一类人的行为进行授权

    (3)Anoymous​账户:匿名账户,允许任何人​

    四、源码

    D33_3_LoopOfServer.py

    D33_4_TCPSever.py

    D33_5_TCPClient.py

    https://github.com/ruigege66/Python_learning/blob/master/D33_3_LoopOfServer.py

    https://github.com/ruigege66/Python_learning/blob/master/D33_4_TCPSever.py

    https://github.com/ruigege66/Python_learning/blob/master/D33_5_TCPClient.py

    2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

    3.博客园:https://www.cnblogs.com/ruigege0000/

    4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    线程中测试getName方法和getId方法
    编写一个线程改变窗体的颜色
    创建两个线程分别输出1-100
    输出一个目录中的内容
    file占用字节
    MAP集合选出最大值
    使用增强for循环遍历集合
    数据框中的基本操作
    列表的基本操作
    因子的基本操作
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/11925336.html
Copyright © 2011-2022 走看看