1简单的socket server和client,完成一次通讯
import socket server = socket.socket()#创建server实例 server.bind(("localhost",9999))#绑定server IP和Port server.listen()#监听 conn,addr = server.accept()#接收链接 data = conn.recv(1024)#接收数据,赋值给data变量 print(data)#打印接收到的数据 conn.send(((data.decode()).upper()).encode("utf-8"))#把接收到的内容转换为大写,发回给客户端 server.close()#关闭server
import socket client = socket.socket()#创建客户端实例 client.connect(("localhost",9999))#链接socket server的IP和Port data = input(">>:")#输入传输的内容 client.send(data.encode("utf-8"))#把输入的内容编码为二进制 recived_data = client.recv(1024)#接收服务器传回来的数据 print(recived_data.decode())#打印解码后的数据 client.close()#关闭客户端
上面是最简单的socket收发数据的例子,客户端发送一次字符串,服务器接收字符串后,把字符串转换为大写后发回给客户端,客户端接收后,打印结果。这个例子收发都是一次
2 多次收发数据
import socket server = socket.socket()#创建server实例 server.bind(("localhost",9999))#绑定server IP和Port server.listen()#监听 conn,addr = server.accept()#创建与客户端的链接 """accept() -> (socket object, address info) Wait for an incoming connection. Return a new socket representing the connection, and the address of the client. For IP sockets, the address info is a pair (hostaddr, port). """ #conn,addr不能放在循环里,如果放在循环里表示每次循环都要重新创建server和客户端的链接,这样就不能多次接收同一个客户端的数据了 while True: data = conn.recv(1024)#接收数据,赋值给data变量 print(data)#打印接收到的数据 conn.send(((data.decode()).upper()).encode("utf-8"))#把接收到的内容转换为大写,发回给客户端 server.close()#关闭server
import socket client = socket.socket()#创建客户端实例 client.connect(("localhost",9999))#链接socket server的IP和Port while True: data = input(">>:")#输入传输的内容 client.send(data.encode("utf-8"))#把输入的内容编码为二进制 recived_data = client.recv(1024)#接收服务器传回来的数据 print(recived_data.decode())#打印解码后的数据 client.close()#关闭客户端