0
私はネットワークとソケットのプログラミングに全く新しいです。私はいくつかのコードを試しました。 3つのクライアントと1つのサーバーc1メッセージがあり、それがサーバーを経由してc2とc3に反映されているとします。スレッドマルチスレッドチャットサーバソケットプログラムを行う方法は?
私の問題:
- (私は「こんにちは」、それはまた、私のために示していますが、それはC2とだけC3に示すべきであると言うならば)私は自分自身のメッセージを表示したくありません。
- 唯一のC2のような方法は、c1がPythonでこれを実行することができませんでし
- それを送信し、エラーが表示されるので、どのようにそれは、Python 3に
を行うことができたときに、C3のメッセージを見ることができず、そこにありますserver.py
import socket
import time
host = ''
port = 5020
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
a=s.bind((host, port))
#s.setblocking(0)
quitting = False
print "Server Started."
print("socket binded to %s" % (port))
while not quitting:
try:
data, addr = s.recvfrom(1024)
if "Quit" in str(data):
quitting = True
if addr not in clients:
clients.append(addr)
#print clients
for client in clients:
if not a:# tried this for broadcasting to others not c1
s.sendto(data, client)
print time.ctime(time.time()) + str(addr) + ": :" + str(data)
except:
pass
s.close()
これはPython 2のコードです。
client.py
enter code hereimport socket
import threading
import time
shutdown = False
def receving(name, sock):
while not shutdown:
try:
while True:
data, addr = sock.recvfrom(1024)
print str(data)
except:
pass
host = ''
port = 5020
server = ('',5020)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
#s.setblocking(0)
for i in range(5):
threading.Thread(target=receving, args=("RecvThread",s)).start()
alias = raw_input("Name: ")
message = raw_input(alias + "-> ")
while message != 'q':
if message != '':
s.sendto(alias + ": " + message, server)
message = raw_input(alias + "-> ")
time.sleep(0.1)
shutdown = True
s.close()
出力は、サーバに取得していますが、時間とサーバーメッセージ正しいですが、私の問題は、クライアント出力C1メッセージがC1自体に示されています。
Name: c1
c1-> hi
c1-> c1: hi
3行目の「hi」というメッセージも表示されます。
あなたがこれを行うことができます
この:あなたがこれを行うと、すべての接続されたクライアントのアドレスがaddrの変数に格納されているので
を良い質問であるように思われるが、むしろおしゃべりスタイルに傷ついていた。b eggingとtxtspk:改訂履歴でどれくらいの修復が必要か確認してください。完全な単語の入力が面倒すぎる場合は、スタックオーバーフローがあなたのためではないかもしれません。 – halfer
ok @halfer次回は質問を投稿するように改善しようとしています – onemanarmy