python中的聊天服务器/客户端
Posted
技术标签:
【中文标题】python中的聊天服务器/客户端【英文标题】:chat server/client in python 【发布时间】:2014-11-28 08:47:05 【问题描述】:我使用此聊天服务器/客户端尝试运行客户端时遇到问题 我在 windows 下为该行使用 python 3.4
ready_to_read,ready_to_write,in_error = select.select(socket_list , [], [])
WinError 10038 尝试对非套接字的操作进行操作
当我更改此行 socket_list = [sys.stdin,s] to socket_list = [s]
时错误消失但程序不会等待来自客户端的输入
有什么想法吗?
这是代码
# chat_client.py
import sys
import socket
import select
def chat_client():
#if(len(sys.argv) < 3) :
# print ('Usage : python chat_client.py hostname port')
# sys.exit()
host = 'localhost'
port = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
# connect to remote host
try :
s.connect((host, port))
except :
print ('Unable to connect')
sys.exit()
print ('Connected to remote host. You can start sending messages')
sys.stdout.write('[Me] '); sys.stdout.flush()
prompt()
while 1:
socket_list = [sys.stdin,s]
# Get the list sockets which are readable
ready_to_read,ready_to_write,in_error = select.select(socket_list , [], [])
for sock in ready_to_read:
print('tset')
if sock == s:
# incoming message from remote server, s
data = sock.recv(4096)
if not data :
print ('\nDisconnected from chat server')
sys.exit()
else :
#print data
sys.stdout.write(data)
sys.stdout.write('[Me] '); sys.stdout.flush()
else:
print('tset')
# user entered a message
#msg= input()
msg = sys.stdin.readline()
s.send(msg)
sys.stdout.write('[Me] '); sys.stdout.flush()
if __name__ == "__main__":
sys.exit(chat_client())
【问题讨论】:
【参考方案1】:引用select doc
请注意,在 Windows 上,它仅适用于套接字;在其他操作系统上,它也适用于其他文件类型(特别是在 Unix 上,它适用于管道)。它不能用于常规文件来确定文件自上次读取后是否已增长。
可能问题出在windows的限制上。
编辑:
这证实了windows上的问题:
select.select(rlist, wlist, xlist[, timeout])
允许空序列,但接受三个空序列取决于平台。 (众所周知,它可以在 Unix 上工作,但不能在 Windows 上工作。)
您应该看到文档的注释部分,该部分提供了 WinSock 库的解决方法: https://docs.python.org/2/library/select.html?highlight=select#select.select
【讨论】:
我正在使用空序列并且它工作以及在删除 system.stdin 时我很困惑我应该做什么。你说的库不能导入?? 这在您删除 sys.stdin 时起作用,因为这是 windows 不接受的。 也许您应该尝试input = sys.stdin.readline()
和socket.send(input)
发送您的信息。我不习惯使用套接字,所以我不确定它是否有效以上是关于python中的聊天服务器/客户端的主要内容,如果未能解决你的问题,请参考以下文章