私はネットワークとソケットのプログラミングにまったく慣れていません。私はいくつかのコードを試しました。3 つのクライアントとサーバー c1 メッセージがあり、サーバーを通過して c2 と c3 に反映されるとします。
私の問題:
- 私は自分のメッセージを見たくありません (「こんにちは」と言うと、私にも表示されますが、c2 と c3 のみに表示されるはずです)。
- c1が送信したときにc2だけがメッセージを見ることができ、c3には見えないようにする方法はありますか
- Pythonでこれを行うことができず、エラーが表示されるので、Python 3でどのように行うことができますか
サーバー.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行目に「こんにちは」というメッセージも表示されます。