0

私はネットワークとソケットのプログラミングにまったく慣れていません。私はいくつかのコードを試しました。3 つのクライアントとサーバー c1 メッセージがあり、サーバーを通過して c2 と c3 に反映されるとします。

私の問題:

  1. 私は自分のメッセージを見たくありません (「こんにちは」と言うと、私にも表示されますが、c2 と c3 のみに表示されるはずです)。
  2. c1が送信したときにc2だけがメッセージを見ることができ、c3には見えないようにする方法はありますか
  3. 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行目に「こんにちは」というメッセージも表示されます。

4

1 に答える 1