推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sbmzhcn
V2EX  ›  Python

python socket server 编程,阻塞问题

  •  
  •   sbmzhcn · Dec 10, 2014 · 4649 views
    This topic created in 4197 days ago, the information mentioned may be changed or developed.
    是不是阻塞我也不太清楚,我先描述下问题吧,对于socket编程也不太熟悉,只是参考资料自己试了下。
    下面这代码当作服务器端DSC的代码,一直在等待另一客户端DTU发送数据。
    HOST = '127.0.0.1'
    PORT = 8089
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((HOST, PORT))
    sock.listen(5)

    while True:
    print "wating for connection..."
    connection, address = sock.accept()
    print "connected from", address
    while True:
    data = connection.recv(1024)
    if not len(data):
    continue

    代码如上,执行的话是没有问题的,当客户端DTU一直send数据的时候。如果现在出现意外,客户端DTU断电或者其它情况数据中断发送一会,上面的代码就出错了,会一直不动。我想要的结果应该是DSC,就是上面的代码从connection, address = sock.accept() 重新执行一下,待DTU再重新发数据的时候我这边可以正常接收,现在如果我不重新执行代码的它就不会重新接收,等同于“卡死”在那儿。

    不知道大家有没有听明白。上面的代码是DSC端。有一个DTU端一直在向DSC发送数据。DTU端是一个无线发送装置,不用关心,只知道它会不停的向DSC发送数据。 DTU随时会断电,所以要保证DSC能很好的处理各种情况,请教大家如何解决?


    DTU每次发送数据时如果断电,connection, address = sock.accept() 接收到的address会每次都不一样的,我测试过。
    5 replies    2014-12-15 09:10:14 +08:00
    mengskysama
        1
    mengskysama  
       Dec 11, 2014
    if len(data) == 0:
    break
    mengskysama
        2
    mengskysama  
       Dec 11, 2014
    <= 0
    allenforrest
        3
    allenforrest  
       Dec 11, 2014
    把 accept 的监听代码放在一个线程里,接收到一个成功连接就添加到一个 socket 队列里,主线程循环 select(或 epoll)所有 socket 队列,处理消息收发。
    julyclyde
        4
    julyclyde  
       Dec 14, 2014
    thread mixin class
    mengzhuo
        5
    mengzhuo  
       Dec 15, 2014
    一楼正解
    remote 自己断开时回发送FIN数据包,然后长度为0
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5990 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 03:27 · PVG 11:27 · LAX 20:27 · JFK 23:27
    ♥ Do have faith in what you're doing.