尝试打破Python 3中的“接收”循环时,服务器套接字应用程序将变成无限循环

魔导师

我已经在Python 3中制作了一个聊天服务器。它与客户端建立连接,等待来自客户端的消息,打印消息并将消息保存到txt文件中。当客户端发送消息b'/ dc'时,客户端关闭连接,服务器应中断循环。而是,客户端关闭正常,但是服务器循环将无限的消息打印到屏幕上。

服务器:

import socket
import sys
import os
import optparse

def createServer(port):

    # create a TCP socket
    sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # bind the socket to the port
    server_address = ('localhost', port)
    print("starting up on {} port {}".format(*server_address))
    sck.bind(server_address)

    # put the socket into server mode
    sck.listen(5)

    return sck


def runServer(sck, conn, client, logs):

    # server loop
    while True:
        data = conn.recv(1024)
        if data != b'/dc':
            message = client[0] + ': ' + data.decode() + '\n'
            print(message)
            logs.write(message)
        else:
            conn.close()
            break


def main():

    # option to set port when launching the server
    parser = optparse.OptionParser("Usage: pyhon3 server.py -p <server port>")
    parser.add_option('-p', dest='port', type='int', help="specify target port")
    (options, args) = parser.parse_args()
    port = options.port

    if port == None:
        print(parser.usage)
        exit(0)

    # create server logs
    logs = open('./logs.txt', 'a+')

    # create the socket
    sck = createServer(port)


    # wait for connection and start thread
    conn, client = sck.accept()
    runServer(sck, conn, client, logs)


if __name__ == '__main__':
    main()

客户:

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print('connecting to {} port {}'.format(*server_address))
sock.connect(server_address)

while True:

    # Send data
    message = bytes(input('> '), 'utf8')
    if message != b'/dc':
        print('sending {!r}'.format(message))
        sock.sendall(message)
    else:
        break

sock.close()

客户输出:

connecting to localhost port 10000
> test
sending b'test'
> 123
sending b'123'
> /dc

服务器输出:

127.0.0.1: test

127.0.0.1: 123

127.0.0.1: 

127.0.0.1: 

127.0.0.1: 

127.0.0.1: 

127.0.0.1: 
...
斯蒂芬·乌尔里希(Steffen Ullrich)
    if data != b'/dc':
        message = client[0] + ': ' + data.decode() + '\n'
        print(message)
        logs.write(message)
    else:
        conn.close()
        break

这期望客户端发送/dc以退出循环。但是客户端永远不会发送,/dc因为它将退出循环并在/dc输入时关闭套接字,并且不会/dc在套接字关闭之前发送

if message != b'/dc':
    print('sending {!r}'.format(message))
    sock.sendall(message)
else:
    break

在客户端关闭的情况下,服务器将recv清空字符串。空字符串!= b'/dc'表示符合条件以打印消息,而不是关闭连接并退出循环

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试在Python中打破while循环时收到错误消息

来自分类Dev

尝试在Python中打破while循环时收到错误消息

来自分类Dev

Python 3:服务器套接字未正确关闭,收到空白消息的无限循环

来自分类Dev

尝试打破while循环时陷入无限循环

来自分类Dev

什么是 Python 中正确的无限套接字服务器循环

来自分类Dev

尝试使用关键字“ exit”的用户输入打破while循环。(插入SQLite3表)[Python]

来自分类Dev

尝试打破Java中的while循环

来自分类Dev

打破循环-Python

来自分类Dev

打破内循环python

来自分类Dev

套接字Python 3.5:套接字服务器在文件接收时永久挂起

来自分类Dev

在Python中打破平局

来自分类Dev

在Python中正确打破循环

来自分类Dev

尝试将应用程序重定向到新服务器端口时出错

来自分类Dev

如何打破Python中的嵌套循环?

来自分类Dev

Python套接字服务器接收重复数据

来自分类Dev

从套接字python服务器接收消息

来自分类Dev

需要两次尝试才能打破我的while循环

来自分类Dev

尝试cURL时“ /”应用程序中的服务器错误

来自分类Dev

使用 Python 中的套接字无限等待来自服务器的回复

来自分类Dev

Python套接字服务器/客户端未循环

来自分类Dev

Python:等待服务器套接字连接时运行循环

来自分类Dev

尝试在树莓派上托管python套接字服务器时出现ConnectionRefusedError

来自分类Dev

我正在尝试在单个服务器和多个客户端中使用套接字编程开发聊天应用程序

来自分类Dev

Python-打破所有循环

来自分类Dev

Python打破了while循环+异常

来自分类Dev

无法在函数内打破 python while 循环

来自分类Dev

自动布局将尝试通过打破约束来恢复

来自分类Dev

Python如何区分python套接字模块中的数据(服务器接收时)。

来自分类Dev

应用程序中的服务器错误-尝试将图像添加到数据库时找不到资源

Related 相关文章

  1. 1

    尝试在Python中打破while循环时收到错误消息

  2. 2

    尝试在Python中打破while循环时收到错误消息

  3. 3

    Python 3:服务器套接字未正确关闭,收到空白消息的无限循环

  4. 4

    尝试打破while循环时陷入无限循环

  5. 5

    什么是 Python 中正确的无限套接字服务器循环

  6. 6

    尝试使用关键字“ exit”的用户输入打破while循环。(插入SQLite3表)[Python]

  7. 7

    尝试打破Java中的while循环

  8. 8

    打破循环-Python

  9. 9

    打破内循环python

  10. 10

    套接字Python 3.5:套接字服务器在文件接收时永久挂起

  11. 11

    在Python中打破平局

  12. 12

    在Python中正确打破循环

  13. 13

    尝试将应用程序重定向到新服务器端口时出错

  14. 14

    如何打破Python中的嵌套循环?

  15. 15

    Python套接字服务器接收重复数据

  16. 16

    从套接字python服务器接收消息

  17. 17

    需要两次尝试才能打破我的while循环

  18. 18

    尝试cURL时“ /”应用程序中的服务器错误

  19. 19

    使用 Python 中的套接字无限等待来自服务器的回复

  20. 20

    Python套接字服务器/客户端未循环

  21. 21

    Python:等待服务器套接字连接时运行循环

  22. 22

    尝试在树莓派上托管python套接字服务器时出现ConnectionRefusedError

  23. 23

    我正在尝试在单个服务器和多个客户端中使用套接字编程开发聊天应用程序

  24. 24

    Python-打破所有循环

  25. 25

    Python打破了while循环+异常

  26. 26

    无法在函数内打破 python while 循环

  27. 27

    自动布局将尝试通过打破约束来恢复

  28. 28

    Python如何区分python套接字模块中的数据(服务器接收时)。

  29. 29

    应用程序中的服务器错误-尝试将图像添加到数据库时找不到资源

热门标签

归档