zoukankan      html  css  js  c++  java
  • 网络编程的循环收发数据

    服务器
    from socket import *
    server = socket(AF_INET,SOCK_STREAM)#创建服务器对象,套接字家族,面向网络,选择tcp协议,udp(DGRAM)
    HOST  = "127.0.0.1"#设置服务器ip
    PORT = 8888#设置端口
    BASE_SIZE = 1024#设置接收文件上限
    server.bind((HOST,PORT))#绑定端口,ip
    server.listen(5)#监听
    while True:
        conn,addr = server.accept()#接收客户端请求,完成了三次挥手,获取客户端对象和地址
        while True:
            try:#监测客户端突然退出异常
                msg = conn.recv(BASE_SIZE)#接收信息
                if not msg:#linux系统客户端退出不会报错,一直发空包,故实现跨平台
                    conn.close()
                    break
                print(msg.decode("utf-8"))#打印接收信息,以什么编码存,以什么编码读
                conn.send(msg.upper())#给客户端回信息
            except ConnectionResetError:#客户端突然退出时,关闭客户端对象,重新进入阻塞接收客户请求
                conn.close()
                break#不加的话,内层循环msg = conn.recv会报错,因为套接字已关闭
    server.close()
    
    
    客户端
    from socket import *
    client = socket(AF_INET,SOCK_STREAM)#创建客户端对象,套接字家族,选择面向网络,选择tcp协议
    HOST  = "127.0.0.1"
    PORT = 8888
    BASE_SIZE = 1024
    client.connect((HOST,PORT))#链接服务器,向服务器发请求,完成三次握手
    while True:
        msg = input(">>>:").strip().encode("utf-8")
        client.send(msg)#发送信息,只能发送bytes类型
        res = client.recv(BASE_SIZE)#接收服务器信息
        print(res.decode("utf-8"))
    client.close()
    
    
    udp循环输入
    服务器
    from socket import *
    server  = socket(AF_INET,SOCK_DGRAM)#建立服务器,选择套接字家族和udp协议
    HOST  = "127.0.0.1"
    PORT = 8888
    BASE_SIZE = 1024
    server.bind((HOST,PORT))#绑定端口,ip
    while True:
        msg,addr = server.recvfrom(BASE_SIZE)#直接接收,与tcp不同,tcp接收的是信息,udp接收的是信息和客户端地址
        print(msg.decode("utf-8"))
        server.sendto(msg.upper(),addr)#直接发送,需要加客户端地址
    
    server.close()
    
    客户端
    from socket import *
    
    client = socket(AF_INET, SOCK_DGRAM)
    HOST = "127.0.0.1"
    PORT = 8888
    BASE_SIZE = 1024
    while True:
        msg = input(">>:").strip().encode("utf-8")
        client.sendto(msg,(HOST,PORT))#发送时需加上服务器地址
        res,addr = client.recvfrom(BASE_SIZE)#接收服务器信息和服务器地址
        print(res.decode("utf-8"))
    
    
    client.close()
    
    tcp #好人协议,可靠性高,效率低
    udp#可靠性低,不管对方收不收到,不管地址存不存在,效率高
    
  • 相关阅读:
    有用的sql语句积累
    spring boot sso 学习资源
    notepad++ 常用快捷键
    artTemplate的使用总结
    ajax完整请求
    03 Mybatis框架---学习笔记1--框架的概念及优势
    02 Struts2框架----学习笔记2(了解一下,已过时)
    IDEA 获取类的相对路径和绝对路径
    01 Struts2框架学习(了解一下,已过时)
    喜马拉雅 FM 已购付费音频下载
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10176967.html
Copyright © 2011-2022 走看看