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
socket_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_client

上面是最简单的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
socket_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()#关闭客户端
socket_client
01-04 06:30