会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 Nginx   Redis   Python手册   Hadoop   Memcache
当前位置:首页 > Python基础教程 > 正文

python服务器的搭建

时间:2017-07-24 08:51 来源:未知 作者:admin 阅读:

早先对于python服务器的理解不够充分

对于这门语言的理解一直只处于前端网页的制作与后端数据处理方面

因此对于python服务器的搭建几乎处于空白阶段

对此我表示需要深刻的恶补

因此从头学习python服务器的搭建

结果没想到python服务器处理tcp请求也是使用socket的方式

因此对于我的学习来说还算是比较顺利

复制代码
 1 p_port = ('192.168.7.11', 9999)
 2 web = socket.socket()
 3 web.bind(ip_port)
 4 web.listen(5)
 5 
 6 while True:
 7     print 'I am waiting for the client'
 8     conn, addr = web.accept()
 9     # thread = threading.Thread(target=jonnys, args=(conn, addr))
10 
11     data = conn.recv(1024)
12     print data
13     conn.sendall(str('<h1>welcome nginx</h1>'))
14     conn.close()
复制代码

以上是简单的服务器

附使用简单客户端

复制代码
import socket

ip_port = ('192.168.7.11', 9999)
sk = socket.socket()
sk.connect(ip_port)
sk.sendall('haha douyu\n')
sk.sendall('you like join this\n')
server_reply = sk.recv(1024)
# server_reply_three = sk.recv(1024)
print server_reply
# print server_reply_three
# sk.sendall('join this\n')
# server_reply_two = sk.recv(1024)
# print server_reply_two
sk.close()
复制代码

使用ThreadingTCPServer, StreamRequestHandler来实现多线程服务器处理

但是有一个小BUG需要解决

复制代码
from SocketServer import ThreadingTCPServer, StreamRequestHandler
import traceback

class MyStreamRequestHandlerr(StreamRequestHandler):
    """
    #StreamRequestHandler,并重写handle方法
    #(StreamRequestHandler继承自BaseRequestHandler)
    """
    def handle(self):
        while True:
            #客户端主动断开连接时,self.rfile.readline()会抛出异常
            try:
                #self.rfile类型是socket._fileobject,读写模式是"rb",方法有
                #read,readline,readlines,write(data),writelines(list),close,flush
                data = self.rfile.readline().strip()
                # if data == '\'\'':

                # print data
                print "receive from (%r):%r" % (self.client_address, data)
                # data = self.request.recev(1024).strip

                #self.client_address是客户端的连接(host, port)的元组)

                #self.wfile类型是socket._fileobject,读写模式是"wb"
                self.wfile.write(data.upper())
            except:
                traceback.print_exc()
                break

if __name__ == "__main__":
    #telnet 127.0.0.1 9999
    host = ""       #主机名,可以是ip,像localhost的主机名,或""
    port = 9999     #端口
    addr = (host, port)

    #ThreadingTCPServer从ThreadingMixIn和TCPServer继承
    #class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
    server = ThreadingTCPServer(addr, MyStreamRequestHandlerr)

    #启动服务监听
    server.serve_forever()
复制代码

当客户端主动关闭套接字时

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
推荐内容
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
¹رÕ/a>