TCP协议,UDP协议

帅爆太阳的男人

1,TCP协议

  • 回环地址:127.0.0.1(所有电脑都这一个默认回环地址)每个计算机都有这么一个本机地址只能被本机识别,不会被其他机器识别(因为你用这个地址传内容他就传不出去)
  • TCP三次握手:一定是client先发起请求
    • a:客户端发起请求连接服务器
    • b:服务器返回:接收到请求,并要求连接客户端
    • c:客户端回复:可以连接
  • 四次握手:client和server谁发起断开请求都可以
    • a:客户端发起断开连接的请求
      • 意思是:我想和你断开连接,我没有数据要继续发送了,但是如果你有数据要继续发送,我可以继续接受
    • b:服务器回复:我接收到你的请求了
    • c:服务器发送:我已经准备好断开连接了
    • d:客户端回复:收到你的信息,断开连接

2,UDP协议及编码

  • sk = socket.socket(type = SOCK_DGRAM)
  • UDP协议通信的优势:
    • 允许一个服务器同时和多个客户端通信而TCP协议不行
  • 2.1>普通UDP协议代码
import socket  # 服务器
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",8008))
while 1:
    mas_s,addr = sk.resvfrom(1024)
    print(mas_s.decode("utf-8"),addr)
    message = sk.sendto(input(">>>").encode("utf-8"),addr)
sk.close()  # 当然程序执行不到这
import socket  # 客户端
sk = socket.socket(type=socket.SOCK_DGRAM)
while 1:
    mas_c = sk.sendto(input(">>>").encode("utf-8"),("127.0.0.1",8008))
    mass = sk.resvfrom(1024)
    print(mass.decode("utf-8"))
    sk.close()
  • 2.2>带署名的UDP协议(接收到的不在是IP地址,而是名字)
    • 服务端:
import socket
sk = socket.socket(type=SOCK_STREAM)
sk.bind(("127.0.0.1",8008))
conn, addr = sk.accept()
while 1:
    mas_s = sk.resvfrom(1024)
    print(mas_s.decode("utf-8"),addr)
    message = sk.sendto(input(">>>").encode("utf-8"))
    • 客户端:
import socket
sk = socket.socket(type=SOCK_DGRAM)
name = input("name:")
while 1:
    msg_c = input(">>>")
    info = name + ":" + msg_c
    sk.sendto(info.encode("utf-8"),("127.0.0.1",8008))
    msg_r = sk.resvfrom(1024)
    print(msg_r.decode("utf-8"))   

3,pycharm输出带颜色的操作

  • 格式:33[字体颜色:背景颜色m  数据  33[0m
  • 服务端
import socket
sk = socket.socket(typr=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",8008))
dic = {"alex":"33[32m","金老板":"33[33m","小雪":"33[35m"}
while 1:
    msg_r,addr = sk.recvfrom(1024)
    msg_r = msg_r.decode("utf-8")
    name = msg_r[0].strip()
    color = dic.get(name)
    print("%s %s33[0m" % (color,msg_r)) 
    msg_s = input(">>>")
    sk.sendto(msg_s.encode("utf-8"))
    sk.close()
  • 客户端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
name = input("请输入您的芳名:")
while 1:
    msg_c = input(">>>")
    info = name + ":"+ msg_c
    sk.sendto(info.encode("utf-8"),("127.0.0.1"))
    msg_d,addr = sk.recvfrom(1024)
    print(msg_d.decode("utf-8"))
    sk.close()
原文地址:https://www.cnblogs.com/ljc-0923/p/9505970.html