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()

浙公网安备 33010602011771号