python - Windows select() 只接收,不发送

标签 python linux windows sockets

我让我的 Windows 计算机连接到我的 linux python 服务器。

该服务器非常适合 Linux 用户,但我希望它也能在 Windows 上运行。我做了一些研究,发现 Windows 上的 select.select() 函数可以在没有 stdin 管道的情况下工作,但是当我这样做时,它不会向服务器发送任何数据,只会接收。

代码:

 __author__ = 'root'
import socket
import datetime
import getpass          # Get username
import sys
import threading
import thread
import select

def client():

   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
   address = "192.168.1.17"
   sock.bind((str("192.168.1.231"), int(2222)))
   sock.connect(("192.168.1.17", int(23657)))
   sock.setblocking(0)
   sock.send(getpass.getuser()+"[$ID$]zivofek")

   socket_list = [sys.stdin, sock]
   partner = raw_input("Chat partner: ")

   while 1:
       try:
           message = raw_input()
           sock.sendall(message)
           data = sock.recv(1024)
           print data
       except:
           continue

def get_time():
   return datetime.datetime.strftime(datetime.datetime.now(), '%H:%M:%S')

def main():
   client()

if __name__ == "__main__":
   main()

知道如何在 Windows 中同时接收和发送吗?

最佳答案

不要将套接字设置为非阻塞,除非你真的想多路复用来自不同来源的事件(即不使用 select() 时)。

这里只是正常的阻塞 sendall() 就可以了。还要检查 recv() 的返回长度 - 它在 一些 数据可用时返回,接收到零字节意味着另一端关闭了连接。

同样,不要在客户端 TCP 套接字上 bind() 或设置 SO_REUSEADDR

关于python - Windows select() 只接收,不发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467034/

相关文章:

Python曲线拟合使用相对偏差而不是绝对偏差进行优化

Python 将多列中的值添加到 set()

linux - 如何仅授予对子目录的 ftp 访问权限而不是父目录

python - 使用 distutil 将 list 嵌入 C 扩展 dll

windows - Windows音频回送捕获的格式是否固定?还是声卡依赖?

python - 从列表中的分数元组分配排名

python - 打包的 python .app 文件崩溃,但打包的 python .sh 文件工作正常

linux - 如何使用 YUM 列出包的内容?

python - 在 linux 机器中获取 astimezone 错误

c++ - 如何知道附加的windowstation是否是交互式的?