python之套接字传输

文章目录

  • TCP传输
    • 服务端
    • 客户端
    • 实现图片的传输
      • 服务端
      • 客户端
  • UDP传输
    • 服务端
    • 客户端

TCP传输

服务端

"""
tcp服务端流程
"""

from socket import *

# 创建tcp套接字
tcp_socket = socket(AF_INET,SOCK_STREAM)

# 绑定地址
tcp_socket.bind(("0.0.0.0",8888))

# 设置监听
tcp_socket.listen(3)

# input(">>>>>")

while True:
    # 处理客户端连接
    print("等待连接 ...")
    conn,addr = tcp_socket.accept()
    print("连接了:",addr)

    # 收发数据
    while True:
        data = conn.recv(1024)
        # 无论断开还是收到##都表示客户端结束
        if not data or data == b'##':
            break
        print("收到:",data.decode()) #data->bytes
        conn.send(b'Thanks')

# 关闭
conn.close()  # 断开连接
tcp_socket.close()  # 不能连接新的客户端

客户端

"""
tcp 客户端流程
"""
from socket import *

# 默认值就是tcp套接字
tcp_socket = socket()

# 服务端地址
ADDR = ("127.0.0.1",8888)

# 发起连接
tcp_socket.connect(ADDR)

# 发送接受
while True:
    msg = input(">>")
    tcp_socket.send(msg.encode())
    if not msg or msg == "##":
        break
    data = tcp_socket.recv(1024)
    print("From server:",data.decode())

# 关闭
tcp_socket.close()

实现图片的传输

服务端

"""
tcp服务端流程
"""

from socket import *

def recv_image(conn):
    fw = open("20211209.jpeg",'wb')
    # 边接收边写入
    while True:
        data = conn.recv(1024)
        if not data:
            break
        fw.write(data)

def main():
    # 创建套接字
    sock = socket()
    sock.bind(("0.0.0.0",8888))
    sock.listen(5)
    # 接收连接
    conn,addr = sock.accept()
    print("Connect from",addr)
    # 做事情函数:接收图片
    recv_image(conn)
    conn.close()
    sock.close()

if __name__ == '__main__':
    main()

客户端

"""
tcp 客户端流程
"""
from socket import *

# 服务端地址
ADDR = ("127.0.0.1",8888)

def send_image(sock,file):
    fr = open(file,'rb')
    # 边读取边发送
    while True:
        data = fr.read(1024)
        if not data:
            break
        sock.send(data)

def main():
    sock = socket()
    sock.connect(ADDR)
    # 发送图片函数
    send_image(sock,"01.jpg")

if __name__ == '__main__':
    main()

UDP传输

服务端

"""
udp_server.py
udp服务端实例代码
重点代码 !!!
"""
from socket import *
# 创建UDP套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)
服务端客户端流程
# 绑定地址
udp_socket.bind(("0.0.0.0",8888))
while True:
	# 接收发送消息 data--> bytes
	data,addr = udp_socket.recvfrom(5)
	# if data == b"##":
	# break
	print("从",addr,"收到:",data.decode())
	# 发送给刚才收到的地址
	udp_socket.sendto(b"Thanks",addr)
# 关闭套接字
udp_socket.close()

客户端

"""
udp_client.py
udp 客户端示例
重点代码!!
"""
from socket import *
# 服务器地址
ADDR = ("127.0.0.1",8888)
# 与服务端相同套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)
# 发送消息
while True:
	msg = input(">>")
	if not msg:
	break
	udp_socket.sendto(msg.encode(),ADDR)
	# 结束发送
	# if msg == "##":
	# break
	data,addr = udp_socket.recvfrom(128)
	print("从服务端收到:",data.decode())
udp_socket.close()

你可能感兴趣的:(Service,python,网络协议)