+ -
当前位置:首页 → 问答吧 → python中服务器端套接字关闭的问题(有示例)

python中服务器端套接字关闭的问题(有示例)

时间:2010-11-09

来源:互联网

客户端与服务器端交互都是正常的,只是最后无法关闭掉服务器端,请大家帮忙看看

服务器端:
Python code

from socket import *
from time import ctime

HOST=""
PORT=21567
BUFSIZ=1024
isClose=False
ADDR=(HOST,PORT)

tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while not isClose:
    print("等待连接...")
    (tcpCliSock,addr)=tcpSerSock.accept()
    print("...捕获到一个连接:",addr)

    while True:
        data=tcpCliSock.recv(BUFSIZ)

        if not data:
            print("Server:接受到的数据为空")#这里为什么进不来?
            isClose=True
            break

        print("server 接受到的数据:",data)

        tcpCliSock.send(data)
        tcpCliSock.close()
        break

tcpSerSock.close() #这里无法关闭



Python code

#coding:utf-8
from socket import *
HOST="localhost"
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)
IsClose=False

tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data=input('>')
    if not data:
        print("客户端输入数据为空:",len(data))
    
        IsClose=True
        
    data=data.encode("utf-8")

    tcpCliSock.send(data)

    if IsClose==True:
        print("客户端已关闭")
        break

    data=tcpCliSock.recv(BUFSIZ)
    
    print("客户端收到数据:",data)

tcpCliSock.close()



操作的步骤如下:
1:为服务器端和客户端分别开了两个IDLE
2:先运行服务器端,良好。
3:然后运行客户端,良好。
4:在客户端的IDLE中输入字符abcd,良好
5:服务器端已收到数据并显示,良好
6:在客户端的IDLE中直接回车(相当于输入空),良好
7:服务端没有关闭,而是依然在等待连接

请问为什么最后服务器没有关闭掉?应如何正常关闭服务器?

作者: Dic4000   发布时间: 2010-11-09

我按照你的程序,先运行sever,再运行client,然后server端就出现如下场景,也就是发送空数据,退出server
Python code
>>> ================================ RESTART ================================
>>> 
等待连接...
('...\xb2\xb6\xbb\xf1\xb5\xbd\xd2\xbb\xb8\xf6\xc1\xac\xbd\xd3:', ('127.0.0.1', 4017))
Server:接受到的数据为空
>>> 

作者: luotuo512   发布时间: 2010-11-09

忘了说运行环境,我的程序要在 python 3.1中运行,3.X下可能运行有误

作者: Dic4000   发布时间: 2010-11-09

热门下载

更多