我一直在尝试使用python进行网络编程。为了教会自己如何做到这一点,我一直在玩多个版本的TCP聊天服务器和客户端。我最近的尝试让我想知道我刚刚写的代码有什么问题。只有当一条消息从我刚刚创建的客户机发送出去时,其他消息才会进来。我不知道为什么会这样。我一直在网上搜索,我不知道为什么会这样。我只知道这不是服务器的错误。我确信问题出在我刚创建的客户机上。在
import socket, thread, threading, os
def sendMsg():
Message = raw_input('[-]You:')
s.send(Message)
def recvMsg():
data = s.recv(buff)
print(data)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = raw_input('[-]Target Ip-> ')
port = 5000
buff = 1024
try:
s.connect((host, port))
except:
print('[-]Failed to Connect')
s.close()
loop = True
threads = []
while loop == True:
try:
t1 = threading.Thread(target=sendMsg())
threads.append(t1)
t1.start()
t2 = threading.Thread(target=recvMsg())
threads.append(t2)
t2.start()
except keyboardInterrupt:
print('\n')
break
s.close()
os.system('clear')
服务器代码
^{pr2}$
我对socket编程还很陌生,所以这可能是一次冒险:
在服务器上,
accept
ed连接是否应标记为非阻塞??在sockfd, addr = server_socket.accept()
sockfd.setblocking(0)
在服务器上,您需要管理套接字何时可写吗?看起来套接字是在变得可读时写入的。我可以想象在readcall期间
socket.send
阻塞,因此在这段时间内不会处理新的连接。Python module of the week有一个非常清晰的例子,可以将select
用于非阻塞服务器相关问题 更多 >
编程相关推荐