python_112_网络编程 Socket编程
实例1:客户端发小写英文,服务器端返回给客户端大写英文(仅支持一次接受发送)
服务器端:
#服务器端(先于客户端运行) import socket server=socket.socket() server.bind(('localhost', 6969))#绑定要监听的端口,只能接受一个参数 server.listen()#监听 print('我要开始等电话了') conn,addr=server.accept()#等电话打进来 conn:连接标记 addr:对方的地址 #conn就是客户端连过来而在服务器端为其生成的一个连接实例 print('conn:',conn) print('addr:',addr) print('电话来了') data=conn.recv(1024)#接受数据 数据大小最好<=8192 recv默认是阻塞的 print('recv',data) conn.send(data.upper())#返回一个值 server.close()
客户端:
#客户端 import socket client=socket.socket()#声明协议(socket)类型,同时生成socket连接对象 client.connect(('localhost',6969))#连接,只能接受一个参数 client.send(b'hello world')#发送数据 注:python3中只能发byte类型,python2可以发字符串,byte(字节)类型 # 注:byte类型只能接受ascall码数据类型 # client.send('我要下载aaa片'.encode())#发送中文要这样写(英文也没问题) data=client.recv(1024)#接受服务器端的返回,可以指定接受大小 这里我指定的是1024个字节 print('recv:',data) # print('recv:',data.decode())#接受中文要这样写(英文也没问题) client.close()
实例2:重复接受与发送(linux系统上操作最合适)
服务器端:
import socket import os sever=socket.socket() sever.bind(('localhost',6969)) sever.listen(5)#5可以更换别的数字,这里指的是可以挂起5个客户端连接(异步通信时可以懂得),默认写5个 print('我要开始等电话了') while True: coon, addr = sever.accept() print('coon:', coon) print('addr:', addr) while True: data=coon.recv(10240) print('recv',data) if not data: print('client has lost') break # res = os.popen(data).read() # 获取执行结果,并执行命令(将socket模拟ssh客户端) # coon.send(res)#将send替换为sendall,表示循环发送send coon.send(data.upper()) sever.close()
客户端:
import socket client=socket.socket() client.connect(('localhost',6969)) while True: msg=input('>>:').strip()#注意发送不了空的,所以要用if语句 if len(msg)==0:continue client.send(msg.encode('utf-8')) data=client.recv(1024) print(data.decode()) client.close()