用Python实现一个简单的WebSocket服务器Word下载.docx

上传人:b****3 文档编号:6564603 上传时间:2023-05-06 格式:DOCX 页数:16 大小:23.31KB
下载 相关 举报
用Python实现一个简单的WebSocket服务器Word下载.docx_第1页
第1页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第2页
第2页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第3页
第3页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第4页
第4页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第5页
第5页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第6页
第6页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第7页
第7页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第8页
第8页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第9页
第9页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第10页
第10页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第11页
第11页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第12页
第12页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第13页
第13页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第14页
第14页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第15页
第15页 / 共16页
用Python实现一个简单的WebSocket服务器Word下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用Python实现一个简单的WebSocket服务器Word下载.docx

《用Python实现一个简单的WebSocket服务器Word下载.docx》由会员分享,可在线阅读,更多相关《用Python实现一个简单的WebSocket服务器Word下载.docx(16页珍藏版)》请在冰点文库上搜索。

用Python实现一个简单的WebSocket服务器Word下载.docx

 

服务器

[python] 

viewplain 

copy

1.#coding=utf8 

2.#!

/usr/bin/python 

3. 

4. 

5.import 

struct,socket 

6.import 

hashlib 

7.import 

threading,random 

8.import 

time 

9.import 

struct 

10.from 

base64 

import 

b64encode, 

b64decode 

11. 

12. 

13.connectionlist 

{} 

14.g_code_length 

15.g_header_length 

16. 

17. 

18.def 

hex2dec(string_num):

19. 

return 

str(int(string_num.upper(), 

16)) 

20. 

21. 

22. 

23. 

24.def 

get_datalength(msg):

25. 

global 

g_code_length 

26. 

g_header_length 

27. 

28. 

print 

(len(msg)) 

29. 

ord(msg[1]) 

&

127 

30. 

received_length 

0;

31. 

if 

== 

126:

32. 

#g_code_length 

msg[2:

4] 

33. 

(ord(msg[2])<

<

8) 

(ord(msg[3])) 

34. 

struct.unpack('

>

H'

 

str(msg[2:

4]))[0] 

35. 

36. 

elif 

127:

37. 

10] 

38. 

Q'

10]))[0] 

39. 

14 

40. 

else:

41. 

42. 

int(g_code_length) 

43. 

44. 

45.def 

parse_data(msg):

46. 

47. 

48. 

49. 

50. 

51. 

masks 

msg[4:

8] 

52. 

data 

msg[8:

53. 

54. 

55. 

msg[10:

14] 

56. 

msg[14:

57. 

58. 

6] 

59. 

msg[6:

60. 

61. 

62. 

63. 

raw_str 

'

64. 

65. 

66. 

for 

in 

data:

67. 

+= 

chr(ord(d) 

ord(masks[i%4])) 

68. 

69. 

70. 

71. 

(u"

总长度是:

%d"

int(g_code_length)) 

72. 

73. 

74. 

75.def 

sendMessage(message):

76. 

connectionlist 

77. 

78. 

message_utf_8 

message.encode('

utf-8'

) 

79. 

connection 

connectionlist.values():

80. 

back_str 

[] 

81. 

back_str.append('

\x81'

82. 

data_length 

len(message_utf_8) 

83. 

84. 

85. 

125:

86. 

back_str.append(chr(data_length)) 

87. 

65535 

:

88. 

back_str.append(struct.pack('

b'

126)) 

89. 

h'

data_length)) 

90. 

#back_str.append(chr(data_length 

8)) 

91. 

0xFF)) 

92. 

#a 

struct.pack('

data_length) 

93. 

#b 

chr(data_length 

94. 

#c 

0xFF) 

95. 

(2^64-1):

96. 

#back_str.append(chr(127)) 

97. 

127)) 

98. 

q'

99. 

100. 

101. 

else 

102. 

(u'

太长了'

103. 

msg 

104. 

back_str:

105. 

c;

106. 

str(msg) 

message_utf_8#.encode('

107. 

#connection.send(str.encode(str(u"

\x00%s\xFF\n\n"

message))) 

#这个是旧版 

108. 

#print 

send 

message:

message) 

109. 

!

None 

and 

len(back_str) 

0:

110. 

(back_str) 

111. 

connection.send(back_str) 

112. 

113. 

114.def 

deleteconnection(item):

115. 

116. 

del 

connectionlist['

connection'

+item] 

117. 

118. 

119.class 

WebSocket(threading.Thread):

#继承Thread 

120. 

121. 

122. 

GUID 

"

258EAFA5-E914-47DA-95CA-C5AB0DC85B11"

123. 

124. 

125. 

def 

__init__(self,conn,index,name,remote, 

path="

/"

):

126. 

threading.Thread.__init__(self)#初始化父类Thread 

127. 

self.conn 

conn 

128. 

self.index 

index 

129. 

self.name 

name 

130. 

self.remote 

remote 

131. 

self.path 

path 

132. 

self.buffer 

133. 

self.buffer_utf8 

134. 

self.length_buffer 

135. 

run(self):

#重载Thread的run 

136. 

print('

Socket%s 

Start!

self.index) 

137. 

headers 

138. 

self.handshaken 

False 

139. 

140. 

141. 

while 

True:

142. 

False:

143. 

('

Start 

Handshaken 

with 

%s!

(self.index,self.remote)) 

144. 

bytes.decode(self.conn.recv(1024)) 

145. 

146. 

147. 

self.buffer.find('

\r\n\r\n'

-1:

148. 

header, 

self.buffer.split('

1) 

149. 

line 

header.split("

\r\n"

)[1:

]:

150. 

key, 

value 

line.split("

151. 

headers[key] 

152. 

153. 

154. 

headers["

Location"

("

ws:

//%s%s"

%(headers["

Host"

], 

self.path)) 

155. 

key 

headers['

Sec-WebSocket-Key'

156. 

token 

b64encode(hashlib.sha1(str.encode(str(key 

self.GUID))).digest()) 

157. 

158. 

159. 

handshake="

HTTP/1.1 

101 

Switching 

Protocols\r\n"

160. 

Upgrade:

websocket\r\n"

161. 

Connection:

Upgrade\r\n"

162. 

Sec-WebSocket-Accept:

+bytes.decode(token)+"

163. 

WebSocket-Origin:

+str(headers["

Origin"

])+"

164. 

WebSocket-Location:

\r\n\r\n"

165. 

166. 

167. 

self.conn.send(str.encode(str(handshake))) 

168. 

True 

169. 

Socket 

%s 

success!

%(self.index, 

self.remote)) 

170. 

sendMessage(u'

Welcome, 

171. 

172. 

173. 

174. 

175. 

176. 

177. 

178. 

mm=self.conn.recv(128) 

179. 

len(mm) 

180. 

continue 

181. 

182. 

get_datalength(mm) 

183. 

#接受的长度 

184. 

185. 

mm 

186. 

187. 

188. 

189. 

parse_data(self.buffer) 

#utf8 

190. 

msg_unicode 

str(self.buffer_utf8).decode('

ignore'

#unicode 

191. 

msg_unicode=='

quit'

192. 

Logout!

(self.index)) 

193. 

nowTime 

time.strftime('

%H:

%M:

%S'

time.localtime(time.time())) 

194. 

%

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2