• Python之旅.第八章网络编程


    一、基于TCP协议的套接字通信(无并发效果)

    #阻塞: 程序停住了

    服务端:

    import socket

     

    server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    server.bind(('127.0.0.1',8080))

    server.listen(5)  # listen接收客户端发来的连接请求

     

    while True:

        conn,client_addr=server.accept()

        print(client_addr)

     

        while True:

            try:

                data=conn.recv(1024)

                if not data:break # 针对linux系统

                conn.send(data.upper())

            except ConnectionResetError:  #linux系统在单方面关闭连接时不会报ConnectionResetErrorwindows系统),会receive

                break

        conn.close()

     

    server.close()

    客户端:

    import socket

     

    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    client.connect(('127.0.0.1',8080))

     

    while True:

        msg=input('>>>: ').strip()

        if not msg:continue

        client.send(msg.encode('utf-8'))

        data=client.recv(1024)

        print(data.decode('utf-8'))

     

    client.close()

     

    二、基于UDP协议通信的套接字

    TCP(流式协议):可靠性高。会因为网络原因丢包,但只有在一端收到另一端发来的ack确认信息才会将信息在内存中删除,如果发现丢包(一段时间内没有回复)会将信息再发一份。TCP会存在粘包问题,收与发可以不是对应的。必须先启动服务端,否则报错。

    UDP(数据包协议):可靠性低。信息一旦发出即在内存中删除,如果发生丢包,信息即丢失。UDP效率高速度快的主要原因,一是因为不建连接,二是因为接受后不会确认。 UDP没有粘包问题,收与发一一对应。 如果发hello,但收一个字符,在windows系统中会报错;在linunx系统中不报错,只接收h

    并行:(真正意义上的)同时运行;并行属于并发

    并发: 看起来是同时运行就可以了

     

    服务端:

    import socket

     

    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议

    server.bind(('127.0.0.1',8080))

     

    while True:

    client_data,client_addr=server.recvfrom(1024)

    #保持UDP稳定(丢包少)的最大接受字节为512,所以这里一般设为1024

        print(client_data)

        msg=input('回复%s:%s>>>:' %(client_addr[0],client_addr[1]))

    server.sendto(msg.encode('utf-8'),client_addr)

     

    客户端:

    import socket

     

    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议

     

    while True:

        msg=input('>>>: ').strip()

        client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

        res,server_addr=client.recvfrom(1024)

        print(res.decode('utf-8'))

    #因为UDP不需提前建连接,不用等到一个客户端退出后另一个才能交互;几个客户端都可以和服务端交互。服务端还是一个个服务,但因为处理速度快,会给用户一种并发的感觉。

     

    URL地址: http://www.cnblogs.com/linhaifeng/articles/6817679.html

    http: #浏览器(客户端套接字)使用的协议

    www.cnblogs.com             #域名

    www.cnblogs.com80         #省略:8080为端口,一般服务端端口默认为80

    linhaifeng/articles/6817679.html  #路径

     

    DHCP服务器: 每台电脑自带的,用来配IP,其端口默认67

    DNS服务器: 每台电脑自带的, 用来将域名转成IP,其默认端口53

     

    用浏览器访问某个URL,本质是连接服务器,将其上的文件打开并下载到本地

    a   浏览器客户端套接字 –– UDP –– DNS服务端套接字,将域名解析成IP返回

    b   浏览器客户端套接字 –– TCP –– Web服务端套接字,将文件下载到本地

    常用服务器软件:nginxhttpd

     

    DNS查询为迭代查询

    一般会现在本地DNS查找,如果找不到会在同级DNS查找,若还找不到需要从根DNS服务器逐级问下来(迭代查询);后续解释本地DNS代劳。

    www.cnblogs.com.

    .      #跟域名       #13个跟服务器(美913),受限于UDP稳定性

    com   #顶级域名

    cnblogs  #二级域名    #二级域名需去顶级域名中买

    www    #二级域名的主机名

     

     

  • 相关阅读:
    logging 用于便捷记录日志且线程安全的模块
    win10安装多个mysql实例
    Windows安装mysql-msi
    webAPI解决跨域问题
    net core通过中间件防御Xss
    导出excel
    DES加密/解密类
    MySQL优化配置
    上传文件到服务器
    HttpWebRequest调用接口
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8920691.html
Copyright © 2020-2023  润新知