С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/68: Рейтинг темы: голосов - 68, средняя оценка - 4.91
2 / 2 / 2
Регистрация: 02.02.2014
Сообщений: 16
1

Создание чата между двумя компьютерами через интернет

23.02.2014, 03:04. Показов 12533. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Салют!
Заинтересовала меня работа с сокетами. Поэтому решил разобраться на примере создания чата между двумя компьютерами. ip получателя задается вручную. Дома WiFi, и между компьютерами локальной сети сообщения передаются корректно. Так же корректно отправляется сообщение на внешний ip.

Внимание, вопрос:
Компьютер_1 (ip="192.168.1.5"), Компьютер_2 (ip="192.168.1.6"), и т.д. подключен к WiFi. При выходе в Интернет на все N компьютеров один внешний ip (ip="46.72.11.239").
Как соединиться/отправить сообщение машине(ip="192.168.1.5")?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2014, 03:04
Ответы с готовыми решениями:

Передача коротких сообщений между двумя компьютерами в Интернет
Добрый вечер, уважаемые всем! Требуется приложения такого плана. Есть два компьютера в сети...

Расшарить папку между двумя компьютерами в Интернет
Есть два компьютера, подключенные к интернету. Можно ли на одном из них расшарить выбранную папку...

wi fi нужно сделать интернет между двумя компьютерами
Вообщем ситуация такая есть один компьютер с интернетом от укртелекома, через 200-250 метром в...

Интернет работает, а локалка между двумя компьютерами нет.
Здравствуйте! Моя проблема - отсутствие локальной сети между ПК. Соединение компов по WiFi. Короче...

9
Заблокирован
23.02.2014, 04:20 2
При том что на 6 машине включен чат или же только на 5?
1
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
23.02.2014, 10:19 3
Во внешней сети оба ваши компьютера видны с одним внешним ip-адресом, чтобы отправить сообщение только одной из машин, в случае если сообщения могут принять обе, следует использовать какие-то дополнительные идентификационные данные.
0
Заблокирован
23.02.2014, 12:28 4
При создании соединения нужно отправлять спецсимвол в строке инициализации. А клиентом его распозновать
0
2 / 2 / 2
Регистрация: 02.02.2014
Сообщений: 16
23.02.2014, 19:54  [ТС] 5
Дело в том, что я делаю соединение между двумя компьютерами посредством сокетов.

1) Как указать конкретный адрес получателя?
2) Если сообщение отправить на внешний ip адрес (под которым в сети несколько компьютеров), как организовать прослушивание?
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.02.2014, 21:11 6
Dimasocial, судя по тому что я нагуглил, советуют использовать NAT. Правда как именно - советов нет
0
53 / 56 / 10
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1
23.02.2014, 21:57 7
Объявить класс client со своим адресом и ID.
На одном из компьютеров запускть Listener на внешний ip и необходимый порт.
В заголовках передаваемых данных указывать необходимый ID получателя.
0
2 / 2 / 2
Регистрация: 02.02.2014
Сообщений: 16
24.02.2014, 17:33  [ТС] 8
А можете подробнее объяснить, как должна выглядеть часть кода, позволяющая с этим разобраться?

P.s.: немного кода, который и нужно доработать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Отправка сообщения messageText 
void Send(){
 int myPort = 3000;
 string myIP = "46.75.64.89"; // мой ip
 string receiverIP = "46.45.65.84"; // ip получателя
 string messageText =  "Hello, World!";
 
 IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(receiverIP), myPort); 
 Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 sendSocket.Connect(endPoint);
 
 Byte[] sendBytes = Encoding.Default.GetBytes(messageText);
 sendSocket.Send(sendBytes);
 sendSocket.Close();
}
 
// Получение сообщения receivedMessage
void Receive(){
 int myPort = 3000;
 
 Socket listen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), myPort);
 listen.Bind(endPoint);
 listen.Listen(10);
 
 Socket receiveSocket;
 
 while (true)
 {
  //Пришло сообщение
  receiveSocket = listen.Accept();
  Byte[] receive = new Byte[256];
 
  using (MemoryStream messager = new MemoryStream())
  {
   Int32 receivedBytes;
 
   do{
    receivedBytes = receiveSocket.Receive(receive, receive.Length, 0);
    messager.Write(receive, 0, receivedBytes);
   } while (receiveSocket.Available > 0);
 
   // Пришедшее сообщение
   string receivedMessage = Encoding.Default.GetString(messager.ToArray());
  }
 }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.02.2014, 23:00 9
Лучший ответ Сообщение было отмечено Dimasocial как решение

Решение

Допустим одна из сторон с ip-адресом 192.168.0.100 у вас будет слушать порт 10000. На роутере, к которому этот хост подцеплен, надо пробросить этот порт на соответствующий адрес (port forwarding). Тогда со второго хоста будете слать пакеты на ваш внешний адрес (например 80.80.80.80 - тут живет ваш роутер). А роутер будет их перекидывать куда надо.
1
2 / 2 / 2
Регистрация: 02.02.2014
Сообщений: 16
26.02.2014, 00:12  [ТС] 10
xoraxax, спасибо! Заработало после того как в настройках роутера поставил переадресацию.
А есть ли порт, на который по дефолту, в независимости от производителя, идет перенаправление на подключенные машины?
0
26.02.2014, 00:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2014, 00:12
Помогаю со студенческими работами здесь

Как создать сеть между двумя компьютерами с выходом в интернет
Имеется ADSL роутер "DSL-2540U" и D-Link "DIR-300",стационарный комп. и ноутбук.Win 7 на обоих....

Как создать сеть между двумя компьютерами с выходом в интернет по WIFI? Система Windows 7
Имеется два устройства WiFI и роутер. Интернет в одном из пк напрямую подключен с помощью кабеля.

Как сделать сеть между двумя компьютерами через роутер
Здравствуйте! 1) Как сделать сеть между 2-мя компьютерами? Windows 7 и 10. Роутер DLink DIR-320....

Передача файла между двумя компьютерами через gprs модемы
Здравствуйте!!! Подскажите пожалуйста как осуществить такую передачу, я сначала хотел сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru