socket有两种类型:TCP和UDP
TCP要求收发数据的双方扮演不同的角色:服务器和客户端
服务器会被动等待客户端连接,它自己不会主动发送请求
服务端
import socket #第一行我们打入socket这个库
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s :
# socket.AF_INET代表我们使用的是ipv4的地址家族 socket.SO_MARK代表我们使用的是TCP协议
# 然后我们调用socket中socket()来创建一个socket s
s.bind(("0.0.0.0", 1234))
# 接下来的bind()将我们创建的这个 ,关联到主机的某一个网卡和端口上,网卡我们可以通过IP地址指定
s.listen() #接下来的listen将socket视为监听状态,并等待客户端的连接
c, addr = s.accept() #再下面的accept会接受来自任意客户端的连接,并返回一个新的socket c 以及客户端的IP地址
with c:
print(addr, "connected.")
while True: # 然后是一个循环
data = c.recv(1024) #这个循环会一直调用recv()接受客户端传来的信息
if not data: #然后只要数据不为空
break
c.sendall(data) # 我们就原封不动的将数据回传给客户端
客户端
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s :
s.connect(("127.0.0.1", 1234))
#不同的是我们直接调用connect()并传入服务器IP地址和端口号
s.sendall(b"Hello,Ross!") #随后我们调用sendall()函数发送一条消息给服务器
#b"Hello,Ross!"是一个字节序列不是字符串
data = c.recv(1024) #这个循环会一直调用recv()接受客户端传来的信息
print(Received:", repr(data))
#并将结果打印出来
withe True:
c, addr = s.accept()
t = threading.Thread(target=handle_client, args=(c, addr))
t.start()