pythonsocket界面实例_Python使用socket实现通信的一个简单示例,python,实例

这个实例实现的功能:

利用

多线程

处理多个用户请求的服务器,该服务器会向连向它的客户端发送一张图片。

decode的作用是将其他编码的字符串转换成unicode编码。

如str1.decode('gbk'),表示将gbk编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串。

如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

服务器端:

import json

from base64 import b64encode

from socket import socket

from threading import Thread

pic_name, pic_data = '', ''

def main():

# 图片传送线程

class picthread(Thread):

def __init__(self, client):

Thread.__init__(self)

self._client = client

def run(self):

# 图片信息:名字,数据

dict_pic = {}

dict_pic['picName'] = pic_name

dict_pic['picData'] = pic_data

# dumps - 将Python对象处理成JSON格式的字符串

jsonStr = json.dumps(dict_pic)

# 向客服端传送图片的json信息

self._client.send(jsonStr.encode('gbk'))

# 断开连接

self._client.close()

# 创建套接字

server = socket()

# 绑定IP和端口

server.bind(('192.168.1.102', 5257))

# 开始监听

server.listen(521)

print('server start')

# 将二进制信息转换成b64encode

with open(r'C:\Users\Public\Pictures\Sample Pictures\Koala.jpg', 'rb') as f:

pic_name = f.name[f.name.rfind('\\') + 1:]

pic_data = b64encode(f.read()).decode('utf-8')

while True:

client, addr = server.accept()

print(str(addr) + ' accept!')

# 启动处理客服端请求的线程

picthread(client).start()

if __name__ == '__main__':

main()

小插曲,如果你的是windows系统,可以通过 telnet来访问服务器:

192.168.1.102 5257

客户端:

import json

import socket

from base64 import b64decode

def _main():

client = socket.socket()

client.connect(('192.168.1.102', 5257))

# 保存二进制数据的变量

c_data = bytes()

# 每次从服务器端接收1024个字节,直至全部接收完

data = client.recv(1024)

while data:

c_data += data

data = client.recv(1024)

# loads - 将字符串的内容反序列化成Python对象

c_dict = json.loads(c_data.decode('gbk'))

_name = c_dict['picName']

_data = c_dict['picData'].encode('utf-8')

# 将base64转换成二进制并写入文件

with open('C:\\Users\\Administrator\\Desktop\\client\\' + _name, 'wb') as f:

f.write(b64decode(_data))

print('save OK!')

client.close()

if __name__ == '__main__':

_main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值