Есть готовый клиент-сервер. Нужно дополнить - C#
Формулировка задачи:
Всем добро))
Есть готовый примерчик, клиент-сервера и она работает идеально (на одном компе.)
Я запустил серверную часть с 1-го компа, а клиентскую с 2-го. Нифига не работала. И знаю почему, потому что 127.0.0.1 это локальный по умолчанию адрес. Я узнал глобальный адрес компа из 2ip.ru и там у обе компа показывает одну и ту же адрес. Все же я пробовал запускать с того адреса что показали на 2ip.ru, УВЫ ничего не получилось.
Вопрос: как мне использовать эту клиент сервер на разных компах?
Благодарен за любую, помощь. Thanx.
Вот сервер:
Вот и клиент:
// SocketServer.cs using System; using System.Text; using System.Net; using System.Net.Sockets; namespace SocketServer { class Program { static void Main(string[] args) { // Устанавливаем для сокета локальную конечную точку IPHostEntry ipHost = Dns.GetHostEntry("127.0.0.1"); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 9000); // Создаем сокет Tcp/Ip Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Назначаем сокет локальной конечной точке и слушаем входящие сокеты try { sListener.Bind(ipEndPoint); sListener.Listen(10); // Начинаем слушать соединения while (true) { Console.WriteLine("Ожидаем соединение через порт {0}", ipEndPoint); // Программа приостанавливается, ожидая входящее соединение Socket handler = sListener.Accept(); string data = null; // Мы дождались клиента, пытающегося с нами соединиться byte[] bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.UTF8.GetString(bytes, 0, bytesRec); // Показываем данные на консоли Console.Write("Полученный текст: " + data + "\n\n"); // Отправляем ответ клиенту\ string reply = "Спасибо за запрос в " + data.Length.ToString() + " символов"; byte[] msg = Encoding.UTF8.GetBytes(reply); handler.Send(msg); if (data.IndexOf("<TheEnd>") > -1) { Console.WriteLine("Сервер завершил соединение с клиентом."); break; } handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.ReadLine(); } } } }
// SocketClient.cs using System; using System.Text; using System.Net; using System.Net.Sockets; namespace SocketClient { class Program { static void Main(string[] args) { try { SendMessageFromSocket(9000); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.ReadLine(); } } static void SendMessageFromSocket(int port) { // Буфер для входящих данных byte[] bytes = new byte[1024]; // Соединяемся с удаленным устройством // Устанавливаем удаленную точку для сокета IPHostEntry ipHost = Dns.GetHostEntry("127.0.0.1"); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port); Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Соединяем сокет с удаленной точкой sender.Connect(ipEndPoint); Console.Write("Введите сообщение: "); string message = Console.ReadLine(); Console.WriteLine("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString()); byte[] msg = Encoding.UTF8.GetBytes(message); // Отправляем данные через сокет int bytesSent = sender.Send(msg); // Получаем ответ от сервера int bytesRec = sender.Receive(bytes); Console.WriteLine("\nОтвет от сервера: {0}\n\n", Encoding.UTF8.GetString(bytes, 0, bytesRec)); // Используем рекурсию для неоднократного вызова SendMessageFromSocket() if (message.IndexOf("<TheEnd>") == -1) SendMessageFromSocket(port); // Освобождаем сокет sender.Shutdown(SocketShutdown.Both); sender.Close(); } } }
Решение задачи: «Есть готовый клиент-сервер. Нужно дополнить»
textual
Листинг программы
IPAddress ipAddr = IPAddress.Parse("127.0.0.1");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д