Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Socket, общение по сети 
:(
    Опции темы
retto
Дата 20.12.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



хочу разобраться с сокетами. Перечитал столько литературы что в голове полный бардак.
Хочу создать примитивное приложение для общение в локальной сети. Создал (по примеру) серверный сокет. Создаю клиентский сокет:
Код

 public void s(int port)
            {

                IPHostEntry localMachineInfo =
                   Dns.GetHostEntry("127.0.0.1");//Dns.GetHostName());
                IPEndPoint myEndpoint = new IPEndPoint(
                   localMachineInfo.AddressList[0], port);
                byte[] buffer1 = Encoding.ASCII.GetBytes("telnet");

                _serverSocket = new Socket(
                   myEndpoint.Address.AddressFamily,
                   SocketType.Stream, ProtocolType.Tcp);
                _serverSocket.Connect(myEndpoint);
                _serverSocket.Send(buffer1);
                _serverSocket.Shutdown(SocketShutdown.Both);
                _serverSocket.Close();
            }

но он ругается на строчку _serverSocket.Connect(myEndpoint);, пишет что удаленый компьютер отверг запрос на подключение.... не подскажете в чем тут загвоздка?
PM MAIL   Вверх
retto
Дата 20.12.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



разобрался в чем дело - "стучался" не в тот порт))
Но всеравно не могу принимать сообщения, сообщения принимаются после того, как в командой строке вызываю telnet и подключаюсь к требуемому порту.. тогда все работает.
Как сделать чтобы сообщения нормально принимались?

PM MAIL   Вверх
mr.DUDA
Дата 20.12.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Чтобы принимать сообщения, нужно создать клиентский сокет, ИМХО.


--------------------
user posted image
PM MAIL WWW   Вверх
retto
Дата 20.12.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



mr.DUDA, может ты имел ввиду серверный сокет?

Сообщение передаются и принимаются, всё нормально. Надо узнать у кого еще в сети запущена эта программа, как это сделать? сканировать айпишники по нужному порту, или можно както по-другому (тобишь нормальному)? 

Это сообщение отредактировал(а) retto - 20.12.2007, 21:50
PM MAIL   Вверх
retto
Дата 27.12.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



нужно передавать файлы по сети. Как узнать что "пришел" именно файл а не сообщение? как их распознать?
PM MAIL   Вверх
mr.DUDA
Дата 27.12.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



А чем отличается файл от сообщения ?  smile 

Посылаем через сокет имя файла, потом сразу его содержимое. Клиент принимает имя файла и содержимое, сохраняет у себя. Ногами не бить, в сетях я не спец.


--------------------
user posted image
PM MAIL WWW   Вверх
retto
Дата 27.12.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



ну а если это простое сообщение типа "хай, как дела?"... как определить что это сообщение а не имя файла?
PM MAIL   Вверх
1stain
Дата 27.12.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: нет
Всего: 40



сначала пишем заголовок, фиксированного размера, в котором определяется что передаем. При приеме сначала читаем этот заголовок и дальше в зависимости от типа контента делаем что надо с телом сообщения.


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
retto
Дата 27.12.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



то есть надо создать типа идентификатора для сообщения и для файла?
понял, спс, буду пробовать

Это сообщение отредактировал(а) retto - 27.12.2007, 17:48
PM MAIL   Вверх
mr.DUDA
Дата 27.12.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Простейший вариант - читать байты пока не встретится 0, в кодировке ASCII это признак конца строки.


--------------------
user posted image
PM MAIL WWW   Вверх
retto
Дата 28.12.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



а если юникод? 
можно просто файлы отсылать по одному порту, а сообщения по - другому. На сколько я знаю так устароенна знаменитая аська smile 
таким способом ненадо будет делать лишних операций с определением сообщения и файла. но зато надо будет прослушивать сразу два порта
PM MAIL   Вверх
mr.DUDA
Дата 29.12.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Если юникод - конвертировать строку в байты Encoding.UTF8.GetBytes(str), и перед строкой передавать длину строки в байтах (int). На клиенте читать int, потом массив со строкой, конвертировать обратно в string. Кодировку можно выбрать любую, хоть UTF8, хоть длинный Unicode, главное чтобы на клиенте и сервере совпадало.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.