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

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

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

Студворк — интернет-сервис помощи студентам
Салют!
Заинтересовала меня работа с сокетами. Поэтому решил разобраться на примере создания чата между двумя компьютерами. 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2014, 03:04
Ответы с готовыми решениями:

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

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

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

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

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

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
Лучший ответ Сообщение было отмечено 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  [ТС]
xoraxax, спасибо! Заработало после того как в настройках роутера поставил переадресацию.
А есть ли порт, на который по дефолту, в независимости от производителя, идет перенаправление на подключенные машины?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2014, 00:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru