socket 是服务端和客户端进行通信的,我们先来写一个服务端
服务端
import socket server = socket.socket() # 声明类型 server.bind(('localhost', 8888)) # 绑定ip地址和端口,是个元组 server.listen() # 开始监听 conn, addr = server.accept() # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址在这里等数据发送过来 print(conn, addr) data = conn.recv(1024) # 接收数据 print('recv:', data) conn.send(data.upper()) # 将接收的数据变大写返回给 conn.close() server.close()
客户端
import socket client = socket.socket() # 声明协议类型,默认ipv4,http。同时生成socket连接对象 client.connect(('localhost', 8888)) # 连接服务器的ip 和端口,以元组的形式 client.send(b'hello world!') # 发数据,要以字节发送 data = client.recv(1024) # 接收数据 print('recv:', data) client.close()
这样服务端和客户端就都写好了,先来启动服务端,在来启动客户端,查看控制台
服务端打印的数据如下
<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8888), raddr=('127.0.0.1', 56520)> ('127.0.0.1', 56520) recv: b'hello world!'
客户端打印的数据如下
recv: b'HELLO WORLD!'
接受中文
服务端
import socket server = socket.socket() # 声明类型 server.bind(('localhost', 8888)) # 绑定ip地址和端口 server.listen() # 开始监听 conn, addr = server.accept() # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址 data = conn.recv(1024) # 接收数据 print('recv:', data.decode()) conn.send(data.upper()) # 将接收的数据变大写返回给 server.close()
客户端
import socket client = socket.socket() # 声明协议类型,默认ipv4,http。同时生成socket连接对象 client.connect(('localhost', 8888)) # 绑定ip地址和端口,以元组的形式 client.send('我爱北京天安门'.encode('utf-8')) # 发数据有汉字加encode('utf-8') data = client.recv(1024) # 接收数据 print('recv:', data.decode()) client.close()
服务端打印的数据如下
recv: 我爱北京天安门
客户端打印的数据如下
recv: 我爱北京天安门
和客户端连续通信
服务端
import socket server = socket.socket() server.bind(('localhost', 8888)) server.listen() conn, addr = server.accept() # 放到while里面就卡住了, 因为和一个通完一句话之后,会等另一个连接 while True: data = conn.recv(1024) # 接收数据 if not data: # 判断接收的数据为空就断开 break print('recv:', data.decode()) conn.send(data.upper())
客户端
import socket client = socket.socket() client.connect(('localhost', 8888)) while True: msg = input('>>').strip() client.send(msg.encode('utf-8')) data = client.recv(1024) # 接收数据 print('recv:', data.decode())
方法二
服务端
import socket server = socket.socket() server.bind(('localhost', 6969)) # 绑定要监听端口 server.listen(5) # 监听 print("我要开始等电话了") while True: conn, addr = server.accept() # 等电话打进来 print("电话来了") while True: data = conn.recv(1024) print("recv:", data.decode()) if not data: # 客户端断开后返回上个while继续等 print("client has lost...") break conn.send(data.upper()) server.close()
客户端
import socket client = socket.socket() client.connect(('localhost', 6969)) while True: msg = input(">>:").strip() if len(msg) == 0: # 输入的为空 continue client.send(msg.encode("utf-8")) data = client.recv(10240) print("recv:", data.decode()) client.close()