看了python核心编程和大牛的视频之后,自己动手也试了一试,写写笔记,加深一下印象
首先服务端要导入socket模块,然后绑定地址和端口,并监听,然后进入等待接收来自客户端请求的一个循环,如果有数据来连接,则接收数据,整理后把请求的数据发给客户端。
客户端则也是导入socket模块,连接地址和端口,然后是一个发送请求的循环,然后接收来自服务器的信息。
所有的数据的发送与接收都是采用字节类型,而不是字符串,所以要用encode编码。
实现计算机内部命令的接收与发送,如果输入的命令有误,则给出提示。
服务器端:
import socket, os #导入模块 tcp_ser = socket.socket() tcp_ser.bind((‘localhost‘, 6666))#绑定端口和IP tcp_ser.listen(5)#监听数目 while True:#大循环,客户端挂掉服务端一直监听状态 conn, addr = tcp_ser.accept()#等待连接 print(‘waitting connect...‘, addr) while True:#小循环,一个客户端的多个请求 data = conn.recv(1024)#允许一次接收的数据为1K #if not data:#在客户端已经判断,可以不要 # conn.send(b‘please input command!‘) # continue cmd_data = os.popen(data.decode(‘utf-8‘)).read()#调取读取计算机内部命令 if not cmd_data:#做个判断,如果读取为空,即没有返回信息,则输入命令有误,则发送特定信息,并重新请求 conn.send(b‘No command!‘) continue conn.send(cmd_data.encode(‘utf-8‘))#如果命令正确则发送返回的数据 #conn.close() tcp_ser.close()
客户端:
import socket tcp_client = socket.socket() tcp_client.connect((‘localhost‘, 6666))#客户端应该与服务器端一致 while True:#客户端的循环 data = input(‘>>‘)#判断输入是否为空,若为空则不允许发送 if len(data) == 0: print(‘No input message...‘) continue tcp_client.send(data.encode(‘utf-8‘))#发送请求数据 cmd_msg = tcp_client.recv(102400)#接收返回数据,一次性接收102k print(cmd_msg.decode(‘utf-8‘))#接收和发送都是以字节的形式,所以要编码encode,打印需要解码decode tcp_client.close()
成功实现: