1、Service.py
# encoding=utf-8
# 载入模块
from socket import *
import json, time, threading
import struct
from urllib import unquote
"""
1、客服端与服务端建立连接
2、把客户端的链接存入redis中
3、客户端与客户端通过对方链接进行通信
4、实现对话优化
"""
config = {
'HOST': 'localhost',
'PORT': 11011,
'LISTEN_CLIENT': 50,
'KEY': '391f10fadc339e9ec5fa15af60030ac1',
'SIZE': 2048,
'TIME_OUT': 1000,
'HEART_TIME': 5,
'MAGIC_STRING': '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',
'HANDSHAKE_STRING': "HTTP/1.1 101 Switching Protocols\r\n"
"Upgrade:websocket\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Accept: {1}\r\n"
"WebSocket-Location: ws://{2}/chat\r\n"
"WebSocket-Protocol:chat\r\n\r\n"
}
class Service():
"""
服务端基类
"""
def __init__(self):
#1、第一步建立链接参数
self.sock = socket(AF_INET,SOCK_STREAM)
#2、绑定指定地址
self.sock.bind((config['HOST'], config['PORT']))
#3、监听请求,超过链接数拒绝请求
self.sock.listen(config['LISTEN_CLIENT'])
# 所有监听的客户端
self.clients = {}
self.thrs = {}
self.users = {}
self.stops = []
#print(sock.recv(1024).decode())
print u"\n正在监听链接请求..."
def listen_client(self):
while True:
# 4、循环监听,接收请求链接
connection,addr = self.sock.accept()
print "\n客服端链接ip地址为: "
print "\n",addr
address = addr[0] + ':' + str(addr[1]) # ip:port
global ip,port
ip = addr[0]
#print ip
port = str(addr[1])
#print port
self.redis()
try:
connection.settimeout(5)
# 握手,判断客服端是A还是B,也可以根据频道来广播
buf = connection.recv(1024)
if buf == 'A':
connection.send('A send massage welcome to python server!')#给链接客服端发送消息
else:
connection.send('B send massage please go out!')
except socket.timeout:
print 'time out'
connection.close()
#self.sock.close()
headers = {}
#print u'\n服务端发送的信息:', address
header, data = buf.split('\r\n\r\n', 1)
def redis(self):
import redis
print "\nredis oss...."
# 链接redis数据库
r = redis.Redis(host='localhost', port=6379, db=0)
# 往redis中写数据
r.set('ip',ip)
r.set('port',port)
print "\nip:",(r.get('ip')),"port:",(r.get('port'))
if __name__ == '__main__':
c = Service()
c.listen_client()
2、Client.py
# encoding=utf-8
# 载入模块
from socket import *
import json, time, threading
import struct
from urllib import unquote
"""
1、客服端与服务端建立连接
2、把客户端的链接存入redis中
3、客户端与客户端通过对方链接进行通信
4、实现对话优化
"""
class Client():
def __init__(self):
self.sock = socket(AF_INET, SOCK_STREAM)
self.sock.connect(('localhost', 11011))
self.sock.send(b'B')#发送一个1
print(self.sock.recv(1024).decode())
print u"\n已建立连接..."
self.sock.close()
if __name__ == '__main__':
c = Client()
3、Redis.py
操作Redis的一些方法
# encoding=utf-8
# 载入模块
import redis
# 链接redis数据库
r = redis.Redis(host='localhost', port=6379, db=0)
# 往redis中写数据
r.set('hello','world')
print(r.get('hello'))
r.set('Key', 'value')
# 查看对应的值
print 'Key', r.get('Key')
r['diaosi'] = 'yy'
r.set('xueba', 'xuexi')
r['xuezha'] = 'wan'
print (r.get('xuezha'))
# 查看数据库中有多少个key,多少条数据
print r.dbsize()
# 将数据保存到硬盘中(保存时阻塞)
r.save()
# 查看键值是否存在
print "是否存在结果为:",r.exists("doubi")
# 列出所有键值
print "列出所有键值",r.keys()
# 删除键值对应的数据
print r.delete('diaosi')
print r.delete('xuezha')
# 删除当前数据库所有数据
r.flushdb()