我正在使用套接字在Python Networking上阅读,并在最后找到了下面的代码。我有一个工作正常的服务器文件,并在端口9009上启动服务器。
# chat_client.py
import sys, socket, select
def chat_client():
if(len(sys.argv) < 3) :
print ('Usage : python chat_client.py hostname port')
sys.exit()
host = sys.argv[1]
port = int(sys.argv[2])
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()
while 1:
socket_list = [sys.stdin, s]
# Get the list sockets which are readable
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
for sock in read_sockets:
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 :
# user entered a message
msg = sys.stdin.readline()
s.send(msg)
sys.stdout.write('[Me] '); sys.stdout.flush()
if __name__ == "__main__":
sys.exit(chat_client())
但是,当我尝试上面的客户端部分时,我得到:
OSError: [WinError 10038] An operation was attempted on something that is not a socket
错误来自的行是:
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
和
sys.exit(chat_client())
我已经阅读了有关同一错误的其他问题,他们的答案是在读取所有数据之前套接字已关闭。但是在上面,没有socket.close()
函数,但是在服务器文件中。我试过删除它,更改缩进但仍然得到相同的错误。
另外,阅读类似问题我发现sys.stdin
不是套接字,这可能就是我收到此错误的原因。我能做些什么来解决这个问题吗?
答案 0 :(得分:0)
另外,阅读类似的问题,我发现了这一点
Intent intent = new Intent(Solve.this, MainActivity.class);
不是套接字,这可能就是我的原因 得到这个错误。我能做些什么来解决这个问题吗?
您可以定期检查输入活动,例如: G。将您的sys.stdin
语句替换为
select
请注意,在此示例方法中,当一个人开始输入一行时,只有在输入行完成后才会显示传入的消息。
答案 1 :(得分:0)
我遇到了同样的问题,但是在关闭套接字时却没有,请尝试s.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
您将socket.socket(socket.AF_INET, socket.SOCK_STREAM)
=设置为s
会更容易使用s.close()
并且应该可以工作,如果您找到其他问题的解决方案,让我知道它使我发疯了>