2013-07-13 1 views
0

У меня есть программа, с которой несколько клиентов смогут подключаться к серверу с помощью сокета.сетевой поток отправляет данные только на последний IP-адрес, подключенный к серверу

 private void performConnect() 
    { 

     while (true) 
     { 
      if (myList.Pending()) 
      { 
       thrd = thrd + 1; 
       tcpClient = myList.AcceptTcpClient(); 

       IPEndPoint ipEndPoint = (IPEndPoint)tcpClient.Client.RemoteEndPoint; 
       string clientIP = ipEndPoint.Address.ToString(); 
       nStream[thrd] = tcpClient.GetStream(); 
       currentMsg = "\n New IP client found :" + clientIP; 
       recieve[thrd].Start(); 

       this.Invoke(new rcvData(addNotification)); 
       try 
       { 
        addToIPList(clientIP); 

       } 
       catch (InvalidOperationException exp) 
       { 
        Console.Error.WriteLine(exp.Message); 
       } 
       Thread.Sleep(1000); 
      } 

      } 



    } 

Затем сервер может отправлять данные (сообщения чата) выбранному клиенту, используя этот код.

 private void sendData(String data) 
    { 
     IPAddress ipep =IPAddress.Parse(comboBox1.SelectedItem.ToString()); 
     Socket server = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp); 
     IPEndPoint ipept = new IPEndPoint(ipep, hostPort); 
     NetworkStream nStream = tcpClient.GetStream(); 
     ASCIIEncoding asciidata = new ASCIIEncoding(); 
     byte[] buffer = asciidata.GetBytes(data); 
     if (nStream.CanWrite) 
     { 
      nStream.Write(buffer, 0, buffer.Length); 
      nStream.Flush(); 
     } 
    } 

проблема заключается в том, что любой IP я выбрать из выпадающего списка, сообщение я посылала всегда направлен/отправляемые до последнего IP, который подключен к серверу .. Пожалуйста, кто-нибудь помочь мне найти ошибку .. вся помощь будет оценена, спасибо заранее!

ответ

1

Это потому, что в sendData выполнении

NetworkStream nStream = tcpClient.GetStream(); 

где tcpClient переменная хранит последний принимающем соединения. Вместо этого вы должны использовать массив nStream[], который хранит все подключенные потоки.