【上海校区】python服务器的搭建

python 未结 0 44
合肥网络营销
合肥网络营销 2021-06-22 13:58
悬赏:5
早先对于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 data13     conn.sendall(str("<h1>welcome nginx</h1>"))14     conn.close()

以上是简单的服务器
附使用简单客户端

import socketip_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_twosk.close()

使用ThreadingTCPServer, StreamRequestHandler来实现多线程服务器处理
但是有一个小BUG需要解决

from SocketServer import ThreadingTCPServer, StreamRequestHandlerimport tracebackclass 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()                breakif __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()

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

相关标签:
回答
  • 消灭零回复
提交回复