1、最简单的服务端和客户端
服务端代码
import socket #网络编程需要用到socket模块 server = socket.socket() #创建一个用于监听连接的Socket对像(服务器端) server.setblocking(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #解决服务重启时报address already in use server.bind(('127.0.0.1', 9001)) #设置服务端的ip和端口号 server.listen() #开始监听 conn, addr = server.accept() #接受服务器端发出的消息和地址信息 c_info = conn.recv(1024) #将接受的消息存入到c_info变量中 print(c_info) conn.send(b'hello word') #向客户端发出消息 conn.close() #关闭连接 server.close() #关闭服务端
客户端代码
import socket #网络编程需要用到socket模块 client = socket.socket() #创建一个客户端 client.connect(('127.0.0.1', 9001)) #连接服务端 client.send(b'nice to meet you') #向服务端发消息 s_info = client.recv(1024) #接受服务端发来的消息 print(s_info) client.close() #关闭客户端
2、可交互的服务端和客服端
服务端代码
import socket server = socket.socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('127.0.0.1', 9001)) server.listen() conn, addr = server.accept() while True: info=input('>>>') #输入数据,编码并发送给客户端 info=info.encode('utf-8') conn.send(info) c_info = conn.recv(1024).decode('utf-8') #接受客户端消息并解码 print(c_info) if c_info == 'bye': #当客户端发送bye时,服务端给客户端发送bye并结束循环 conn.send(b'bye') break conn.close() server.close()
客户端代码
import socket client = socket.socket() client.connect(('127.0.0.1', 9001)) while True: s_info = client.recv(1024) #接受服务端的消息并解码 s_info = s_info.decode(encoding='utf-8') print(s_info) if s_info == 'bye': #如果服务端发送的消息为bye,回复bye,结束循环 client.send(b'bye') print('bye_1') break info = input('>>>') #输入数据,编码并发送给服务端 info = info.encode('utf-8') client.send(info) client.close()
总结:无论是服务端和客户逻辑是怎样的,服务端和客户端收发要对应。
3、一个服务端+多个客户端:
服务端代码
import socket server = socket.socket() server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) server.bind(('127.0.0.1',9002)) server.listen() #while语句作用:(当客户端关闭后)接受新客户端的连接,实现服务端不间断地提供服务。 while True: conn,addr = server.accept() #while语句作用:接受来自客户端的消息、打印,回复消息;当客户端的消息中包含‘bye’时,断开本次连接。 while True: msg = conn.recv(1024).decode('utf-8') print(msg) if 'bye' in msg: #当收到的信息包含bye,给客户端发送bye,跳出当前while循环 conn.send(b'bye') break info = input('>>>').encode('utf-8') conn.send(info) conn.close() server.close()
客户端1代码
import socket client_01 = socket.socket() client_01.connect(('127.0.0.1',9002)) while True: info = input('>>>').encode('utf-8') client_01.send(b'from c1:'+info) msg = client_01.recv(1024).decode('utf-8') print(msg) if msg == 'bye': #当收到bye时,给服务器回复bye,跳出循环。 client_01.send(b'bye') break client_01.close()
客户端代码2
import socket client_02 = socket.socket() client_02.connect(('127.0.0.1',9002)) while True: info = input('>>>').encode('utf-8') client_02.send(b'from c2:'+info) msg = client_02.recv(1024).decode('utf-8') print(msg) if msg == 'bye': #当收到bye时,给服务器回复bye,跳出循环。 client_02.send(b'bye') break client_02.close()
代码亲测过,只写了逻辑实现,改进空间很大,请多指点。