我希望添加一个特性,让两个客户端可以相互发送消息而不需要等待或停止。
我有一个服务器的脚本:
我想描述一下我的脚本,并逐步介绍我的代码,这可能有助于使其更易读。
然而,在第二个客户端和服务器之间存在一个问题。我编写了一段代码,当服务器接收到客户端发送的消息时,它会将消息打印为服务器的输出。然而,当第一个客户端发送消息时,它可以正常打印,但是第二个客户端发送消息时就无法打印。
我甚至尝试将客户端脚本复制并放入新文件中,使得两个客户端来自两个不同的文件,以便找到问题。然而,这并没有帮助解决问题。我尝试先运行第一个文件,然后再运行第二个文件,反之亦然。无论如何,第二个客户端都与服务器存在问题。(顺便说一下,我还想知道为什么客户端文件不能打印他自己发送的消息(他仍然会从服务器接收到),但那只是一个次要的问题)。
如果您告诉我代码中的问题,而不是给我一个您创建或找到的代码,我会更加高兴!但是两种方法都可以。
我有一个服务器的脚本:
import socket
import threading
from datetime import datetime
from random import randint
global num
num = 0
class serverThread(threading.Thread):
def __init__(self, client, address):
global num
num = num + 1
self.id = num
threading.Thread.__init__(self)
self.client = client
self.address = address
print "serverThread init finished-" + str(self.id)
def run(self):
print "r1 num-" + str(self.id)
size = 1024
while True:
#try:
print "r2*************-" + str(self.id)
data = self.client.recv(size)
print "r3..... " + data
print "r4-" + str(self.id)
if data:
print "r5-" + str(self.id)
response = data
self.client.send(response)
print "r6-" + str(self.id)
else:
print "r7-" + str(self.id)
raise Exception('Client disconnected-' + str(self.id) )
#except:
# print "Except"
# self.client.close()
# return
def create(ipHost, port):
server = socket.socket()
server.bind((ipHost, port))
print "The server was created successfully."
return server
def listen(server):
server.listen(5)
client, address = server.accept()
c1 = serverThread(client, address)
c1.start()
client, address = server.accept()
c2 = serverThread(client, address)
c2.start()
print "finished both threads created"
while c1.isAlive() and c2.isAlive():
continue
server = create("0.0.0.0", 1725)
listen(server)
正如您所看到的,我没有使用try
和except
,因为我不太了解如何使用它们。
My second script, the client:
import socket
import threading
class sendThread(threading.Thread):
def __init__(self, ip, port):
threading.Thread.__init__(self)
self.client = socket.socket()
self.port = port
self.ip = ip
self.client.connect((self.ip, self.port))
print "[+] New send thread started for "+ip+":"+str(port) + "...Everything went successful!"
def run(self):
while True:
data = raw_input("Enter command:")
self.client.send("Client sent: " + data)
class receiveThread(threading.Thread):
def __init__(self, ip, port):
threading.Thread.__init__(self)
self.client = socket.socket()
self.ip = ip
self.port = port
self.client.connect((str(self.ip), self.port))
print "[+] New receive thread started for "+ip+":"+str(port) + "...Everything went successful!"
def run(self):
print "Entered run method"
size = 1024
while True:
data = self.client.recv(size)
if data != "" or data:
print "A client sent " + data
def client():
port = 1725
ip = '127.0.0.1'
print "Connection from : "+ip+":"+str(port)
receive = receiveThread(ip, port)
print "b1"
receive.start()
print "b2"
send = sendThread(ip, port)
print "b3"
send.start()
while send.isAlive() and receive.isAlive():
continue
print "-----END of While TRUE------"
print "Client disconnected..."
client()
问题
在运行两个客户端之前,当我想先运行服务器时,它会打印:
The server was created successfully.
我运行了2个客户端,两个客户端都输出:
Connection from : 127.0.0.1:1720
[+] New receive thread started for 127.0.0.1:1720...Everything went successful!
b1
Entered run method
b2
[+] New send thread started for 127.0.0.1:1720...Everything went successful!
b3
Enter command:
然而,在第二个客户端和服务器之间存在一个问题。我编写了一段代码,当服务器接收到客户端发送的消息时,它会将消息打印为服务器的输出。然而,当第一个客户端发送消息时,它可以正常打印,但是第二个客户端发送消息时就无法打印。
我甚至尝试将客户端脚本复制并放入新文件中,使得两个客户端来自两个不同的文件,以便找到问题。然而,这并没有帮助解决问题。我尝试先运行第一个文件,然后再运行第二个文件,反之亦然。无论如何,第二个客户端都与服务器存在问题。(顺便说一下,我还想知道为什么客户端文件不能打印他自己发送的消息(他仍然会从服务器接收到),但那只是一个次要的问题)。
如果您告诉我代码中的问题,而不是给我一个您创建或找到的代码,我会更加高兴!但是两种方法都可以。