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#可靠性低,不管对方收不收到,不管地址存不存在,效率高
    
  • 相关阅读:
    判断一个字符串是否为回文串
    读<大道至简>软件工程实践者的思想有感
    Java学习10.23(设置页面的编码方式1)
    Java学习10.25(javaweb在界面输出2)
    【搜索】C000_LG_奶酪(bfs)
    【并查集】B001_AW_自动程序分析(不要求顺序时的离散化)
    b_aw_信息传递 & 银河英雄传说(并查集暴力求环 / 记忆化 | 带权并查集)
    b_pat_团伙头目(并查集/dfs+字符串整形互相映射)
    【堆】C003_AW_接水问题(暴力 / 堆)
    【并查集】C002_AW_樱桃网 & 打击犯罪(最下生成树 / dfs / 并查集求连通块)
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10176967.html
Copyright © 2011-2022 走看看