【问题标题】:Why doesn't the socket display the result?为什么套接字不显示结果?
【发布时间】:2021-02-20 19:59:11
【问题描述】:

我尝试打印出这段代码,Pycharm 中的命令看起来像是在循环代码并且没有显示结果,我说这是因为终端没有完成它的任务,并且美元符号没有出现.我需要知道该代码是否会产生任何输出。此代码是一些教程的副本,因此不是我创建的。

import socket

HOST = socket.gethostbyname(socket.gethostname())
PORT = 5050
ADDR = (HOST, PORT)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(ADDR)
s.listen()
print('running')
conn, addr = s.accept()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()

print('Received', repr(data))

另外,我需要知道(WSGI,ASGI)之间的关系以及它们与python中套接字的关系。

【问题讨论】:

  • wsgi 和 asgi 是 HTTP 服务器的 2 个不同标准,与 socket 模块无关。
  • s.accept() 是一个阻塞操作,您的代码停在那里并等待永远不会发生的连接
  • 当我阅读一些资源时,我有时会在同一个地方阅读有关 WSGI 和套接字的信息,所以,我认为它们之间存在关系,对不起,我对它们很陌生,所以我不知道对他们没有任何背景。你能给我发一些学习WSGI和socket的资源吗?
  • @Nullman s.listen 没有阻塞,s.accept 是。
  • @MedoAbdin 每个 SO 问题一次只问一个特定问题。

标签: python python-sockets


【解决方案1】:

conn, addr = s.accept() 后面的代码永远不会运行,因为s.accept 正在阻塞。将客户端套接字的代码移动到单独的文件并单独运行。

服务器代码:

import socket

HOST = socket.gethostbyname(socket.gethostname())
PORT = 5050
ADDR = (HOST, PORT)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(ADDR)
s.listen()
print('running')
conn, addr = s.accept()
data = conn.recv(1024)
conn.close()
s.close()

print('Received', repr(data))

客户端代码:

import socket

HOST = socket.gethostbyname(socket.gethostname())
PORT = 5050
ADDR = (HOST, PORT)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
s.sendall(b'Hello, world')
s.close()

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多