python 可连接多个客户端的服务器 threading版

4 篇文章 0 订阅
4 篇文章 0 订阅

还是个简单的多连接的服务器。但是发现这样写貌似就不能实现服务器向客户端发送消息了???

觉得很迷茫QAQ

之前发现每次连接的时候,消息都不能很好地返回到页面上。发现是因为客户端接受的时候是循环接受的,所以在接受了头部后,就一直阻塞在那里,关不掉。

等等。。。话说为什么我sendall了却不能显示在页面上,要把socket关掉了才能够把消息都打印出来???QAQ

不管了,先上代码QAQ

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket, threading

def handle(client):
    while 1:
        socket.setdefaulttimeout(0.5)
        try:
            buf = client.recv(4096)    #recv是阻塞的,这里的if判断没有用,因为当服务器不再发送给客户端消息了,循环到此就阻塞了不能进行下去!!!!
            print 'recv ok from %s'%threading.currentThread().getName()
            if not buf:
                break
            print 'buf:\n---%s'%buf
            client.send(buf)
        except socket.error:
            print 'fail to send or recv'
            break
    client.close()
    print 'close?'

host = ''
port = 8080

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)

while 1:
    client, addr = s.accept()
    print client, addr
    t = threading.Thread(target = handle, args = [client])
    t.setDaemon(1)
    t.start()

s.close()

*******************************************

我凑!我是渣请不要管我。让我喊一下!!!

原先一直很疑惑为什么服务器端明明是用s接收socket的,为什么到后来recv和send的时候就要用client的地址了。原来!!!原来不是表示用client收发!而是表示从client处recv,对client进行send。这里就对应UDP里面的recvfrom和sendto啊啊啊啊!!!

为什么连这个都不能好好想想=  =。深深叹气。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值