复习

1.网络编程
1.公网ip 局域网ip
2.端口号——需要进行网络通信时,为了在计算机上找到唯一的程序
3.TCP协议 UDP协议
TCP可靠的,面向连接的,耗时长的
三次握手:
四次挥手
UDP不可靠的,无连接的,效率高的
4.arp协议:通过ip找mac
5.ip协议属于网络OSI七层协议中的那一层: 网络层
6.tcp协议udp属于传输层
7.arp协议属于数据链路层

学习内容

1.udp协议实现
1.不需要监听也不需要建立连接
2.启动服务之后只能被动的等待客户端消息
3.客户端发送消息的同时还会自带地址信息
4.消息回复时,需要发送消息,填写地址
2.黏包现象
1.UDP不会黏包,但是会丢包
2.TCP会黏包,但是不会丢包
3.TCP的黏包现象是因为协议内部的优化

代码区

1.话痨

# 话痨 server
'''
import socket
#TCP 协议
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
while 1:
    conn, addr = sk.accept()
    while 1:
        msg = conn.recv(1024).decode('utf-8')
        print(msg)
        if msg == 'bye':
            conn.send(bytes('bye'.encode('utf-8')))
            break
        info = input('>>> ')
        conn.send(bytes(info.encode('utf-8')))
    conn.close()
sk.close()
'''
# 话痨client1
'''
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while 1:
    msg = input('>>> ')
    sk.send(bytes(msg.encode('utf-8')))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    if ret == 'bye':
        sk.send(bytes('bye'.encode('utf-8')))
        break
sk.close()
'''
# 话痨client2
'''
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while 1:
    msg = input('>>> ')
    sk.send(bytes(msg.encode('utf-8')))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    if ret == 'bye':
        sk.send(bytes('bye'.encode('utf-8')))
        break
sk.close()
'''

2.简易版qq

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
# 简易版qq server
'''
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1', 8080))
while 1:
    msg, addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    info = input('>>> ').encode('utf-8')
    sk.sendto(info,addr)
sk.close()
'''
# 简易版qq client1
'''
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8080)
while 1:
    info = input('ALEX:')
    info = ('\033[34m alex:%s\033[0m'%info).encode('utf-8')
    sk.sendto(info, ip_port)
    ret,addr = sk.recvfrom(1024)
    print(ret.decode('utf-8'))
sk.close()
'''
# 简易版qq client2
'''
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8080)
while 1:
    info = input('TOM:')
    info = ('\033[32m tom:%s\033[0m'%info).encode('utf-8')
    sk.sendto(info, ip_port)
    ret,addr = sk.recvfrom(1024)
    print(ret.decode('utf-8'))
sk.close()
'''

3. 黏包现象

# 黏包现象 server
'''
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
conn, addr = sk.accept()
while True:
    cmd = input('>>> ')
    if cmd == 'q':
        break
    conn.send(cmd.encode('gbk'))
    ret1 = conn.recv(1024).decode('utf-8')
    # ret2 = conn.recv(1024).decode('utf-8')
    print(ret1)
    # print(ret2)
conn.close()
sk.close()
'''
# 黏包现象 client
'''
import socket
import subprocess
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
    cmd = sk.recv(1024).decode('gbk')
    ret = subprocess.Popen(cmd,shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE)
    std_out = 'stdout : ' + (ret.stdout.read()).decode('gbk')
    std_err = 'stderr : ' + (ret.stderr.read()).decode('gbk')
    print(std_out)
    print(std_err)
    sk.send(std_out.encode('utf-8'))
    sk.send(std_err.encode('utf-8'))
sk.close()
'''

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄