|
处理多个连接
为了处理多个连接,我们需要一个独立的处理代码在主服务器接收到连接时运行。一种方法是使用线程,服务器接收到连接然后创建一个线程来处理连接收发数据,然后主服务器程序返回去接收新的连接。
下面是我们使用线程来处理连接请求:- import socket
- import sys
- from thread import *
- HOST = '' # Symbolic name meaning all available interfaces
- PORT = 8888 # Arbitrary non-privileged port
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- print 'Socket created'
- #Bind socket to local host and port
- try:
- s.bind((HOST, PORT))
- except socket.error , msg:
- print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
- sys.exit()
-
- print 'Socket bind complete'
- #Start listening on socket
- s.listen(10)
- print 'Socket now listening'
- #Function for handling connections. This will be used to create threads
- def clientthread(conn):
- #Sending message to connected client
- conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string
-
- #infinite loop so that function do not terminate and thread do not end.
- while True:
-
- #Receiving from client
- data = conn.recv(1024)
- reply = 'OK...' + data
- if not data:
- break
-
- conn.sendall(reply)
-
- #came out of loop
- conn.close()
- #now keep talking with the client
- while 1:
- #wait to accept a connection - blocking call
- conn, addr = s.accept()
- print 'Connected with ' + addr[0] + ':' + str(addr[1])
-
- #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
- start_new_thread(clientthread ,(conn,))
- s.close()
复制代码 |
|