python TCP多客户端连接
python tcp服务端代码:
# coding=utf-8
# !/usr/bin/env python
from socket import *
from time import ctime
import threading
import time
host = '' #主机地址
port = 3046 #端口
bufsiz = 1024 #缓冲区大小
addr = (host, port) #地址及端口
tcpsersock = socket(af_inet, sock_stream) #创建一个tcp套接字
tcpsersock.bind(addr) #绑定地址及端口
tcpsersock.listen(5) #最大client连接数为5
socks = [] # 放每个客户端的socket
#创建一个遍历sock线程,接收数据
def handle():
while true:
for s in socks:
try:
data = s.recv(bufsiz) # 到这里程序继续向下执行
except exception, e: #无接收异常捕获
#print "接收异常!";
continue
if not data: #无数据接收则移除该客户端引用
s.send('[%s],%s' % (ctime(), "")) #断开连接之前需要响应客户端,否则客户端无法再次建立连接
info=s.getpeername()
print "客户端",info,"断开连接!"
s.close() #断开该cilent连接
socks.remove(s) #从数组中移除该cilent连接引用
continue
s.send('[%s],%s' % (ctime(), data)) #有数据接收则返回数据
print data;
t = threading.thread(target=handle) # 子线程
if __name__ == '__main__':
t.start() #启动线程
print 'waiting for connecting...'
while true: #循环监听连接
clientsock, addr = tcpsersock.accept() #等待client连接
print 'connected from:', addr #打印客户端地址及其端口信息
clientsock.setblocking(0) #之后就是非阻塞的
socks.append(clientsock) #保存该客户端引用到socks数组
tcp工具做客户端连接测试:
断开连接: