socket 第三蛋 server2.0~

2.0版本可以多线程啦~这样不用在下一个小伙伴连进来的时候上一个小伙伴会被迫下线了~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import socket
import sys
from thread import *

HOST = '127.0.0.1'
PORT = 7777

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'socket created!'

try:
s.bind ((HOST,PORT))
except socket.error, msg:
print 'socket bind compelte'

s.listen(10)
print 'socket now listen !'

def clientthread(conn):
conn.send('welcome to the server. \n')

while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)

conn.close()
while 1:
conn , addr = s.accept()
print 'connected with ' + addr[0] +' ; ' + str(addr[1])
start_new_thread(clientthread,(conn,))

s.close()

start_new_thread方法有两个参数,第一个参数是我们预定义的函数(这里是clientthread),也就是我们想要创建的线程体;第二个参数是一个tuple(元组),罗列线程体的函数的所有参数,为什么要用一个tuple呢?python很具灵活性,因为不管线程体有多少个参数,通过一个tuple我们就可以传递足够的参数,这里我么传递一个(conn,)tuple,表示只有一个参数。