есть листенер на 5000 порт например, | Код | IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); IPAddress ipAddress = IPAddress.Parse("172.27.2.6"); IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 5000); Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); reset = false; data = null; socketsList.Clear(); acceptedList.Clear(); socketsList.Add(listener); Console.WriteLine("StartListening по 6000 порту"); try { listener.Bind(localEndPoint); listener.Listen(1000); while (!reset) { allDone.Reset(); acceptedList.Clear(); for (int i = 0; i < socketsList.Count; i++) acceptedList.Add(socketsList[i]); Socket.Select(acceptedList, null, null, 1000); for (int i = 0; i < acceptedList.Count; i++) { if (acceptedList[i] == listener) { listener.BeginAccept(new AsyncCallback(AcceptCallback), listener); allDone.WaitOne(); } else { int ind = socketsList.IndexOf(acceptedList[i]); if (ind < 0) { Console.WriteLine("сбой подключения"); } else { Socket client = (Socket)socketsList[ind]; StateObject slave = new StateObject(); slave.workSocket = client; try { if (client.Connected) { client.BeginReceive(slave.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), slave); allDone.WaitOne(); } else if (socketsList.Contains(client)) socketsList.RemoveAt(ind); }
catch (Exception e) { Console.WriteLine(e.ToString()); if (socketsList.Contains(client)) socketsList.RemoveAt(ind); if (client.Connected) { client.Shutdown(SocketShutdown.Both); client.Close(); } } } } } } Console.WriteLine("+++++++++++++Reseting listener+++++++++++++"); for (int i = 0; i < socketsList.Count; i++) { Socket sock = (Socket)socketsList[i]; sock.Close(); } Console.WriteLine("Clear sockets done. Start new listening"); StartListening(); } catch (Exception e) { Console.WriteLine("КРИТИЧЕСКАЯ ОШИБКА\n" + e.ToString()); for (int i = 0; i < socketsList.Count; i++) { Socket sock = (Socket)socketsList[i]; sock.Close(); } listener.Close(); StartListening(); } }
|
все конекты кладутся в лист | Код | private static void AcceptCallback(IAsyncResult ar) { try { allDone.Set(); Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); socketsList.Add(handler);
StateObject state = new StateObject(); state.workSocket = handler; //handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } catch (Exception e) { Console.WriteLine(e.ToString()); } }
|
после мне нада на определеный сокет кинуть команду, но на | Код | for (int i = 0; i < socketsList.Count; i++) { Socket arm = (Socket)socketsList[i]; armip = ((IPEndPoint)arm.RemoteEndPoint).Address.ToString(); }
|
выдает SocketException <0x80004005>: ... no address was supplied
|