TCP
TCP服务端
- 创建套接字socket
- 绑定端口bind
- 侦听客户请求listen
- 接受客户连接accept
- 接受/发送
- 关闭套接字
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080)) # bind('ip', port)
sk.listen()
conn, addr = sk.accept() # connect 连接, address 地址
ret = conn.recv(1024) # receive revv(1024) 一次接受1024个字节
print(ret)
conn.send(b'hello') # 只能发送bytes类型数据3
# 先关闭连接,再关闭套接字
conn.close()
sk.close()
TCP客户端
- 创建套接字
- 连接服务器
- 发送/接受
- 关闭套接字
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
sk.send(b'hi')
ret = sk.recv(1024)
print(ret)
sk.close()
例子:对话
服务端
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen()
conn, addr = sk.accept()
while True:
ret = conn.recv(1024).decode('utf-8')
if ret == 'bye':
conn.send(bytes('bye', encoding='utf-8'))
break
print(ret)
conn.send(bytes(input('>>>'), encoding='utf-8'))
conn.close()
sk.close()
客户端
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
while True:
sk.send(bytes(input('>>>'), encoding='utf-8'))
ret = sk.recv(1024).decode('utf-8')
if ret == 'bye':
sk.send(b'bye')
break
print(ret)
sk.close()
UDP
UDP服务端
- 创建套接字socket
(type=socket.SOCK_DGRAM) - 绑定端口bind
- 接受客户消息
recvfrom() - 向客户端发送消息
sendto(msg, addr) - 关闭套接字
import socket
# 1. 创建udp连接
sk = socket.socket(type=socket.SOCK_DGRAM) # datagram 数据报文
# 2. 起服务
sk.bind(('127.0.0.1', 8080))
# 3. 等待客户端来连接
msg, addr = sk.recvfrom(1024) # 通过recvfrom设定一个报文的大小,并获得一个数据报文与客户端地址
print(msg.decode('utf-8'))
sk.sendto(input('服务端回复:>>>').encode('utf-8'), addr)
sk.close()
UDP客户端
- 创建套接字
- 向服务端发送消息
sendto(msg, ip_port) - 接受服务端过来的消息
recvfrom() - 关闭套接字
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8080)
msg = input('客户端发送:>>>').encode('utf-8')
sk.sendto(msg, ip_port)
ret, addr = sk.recvfrom(1024)
print(ret.decode('utf-8'))
sk.close()