Socket, общение по сети

 
0
 
.NET
ava
retto | 20.12.2007, 15:19
хочу разобраться с сокетами. Перечитал столько литературы что в голове полный бардак.
Хочу создать примитивное приложение для общение в локальной сети. Создал (по примеру) серверный сокет. Создаю клиентский сокет:

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);, пишет что удаленый компьютер отверг запрос на подключение.... не подскажете в чем тут загвоздка?
Comments (11)
ava
retto | 20.12.2007, 15:54 #
разобрался в чем дело - "стучался" не в тот порт))
Но всеравно не могу принимать сообщения, сообщения принимаются после того, как в командой строке вызываю telnet и подключаюсь к требуемому порту.. тогда все работает.
Как сделать чтобы сообщения нормально принимались?
ava
mr.DUDA | 20.12.2007, 17:36 #
Чтобы принимать сообщения, нужно создать клиентский сокет, ИМХО.
ava
retto | 20.12.2007, 17:49 #
mr.DUDA, может ты имел ввиду серверный сокет?

Сообщение передаются и принимаются, всё нормально. Надо узнать у кого еще в сети запущена эта программа, как это сделать? сканировать айпишники по нужному порту, или можно както по-другому (тобишь нормальному)?
ava
retto | 27.12.2007, 16:30 #
нужно передавать файлы по сети. Как узнать что "пришел" именно файл а не сообщение? как их распознать?
ava
mr.DUDA | 27.12.2007, 16:47 #
А чем отличается файл от сообщения ? smile

Посылаем через сокет имя файла, потом сразу его содержимое. Клиент принимает имя файла и содержимое, сохраняет у себя. Ногами не бить, в сетях я не спец.
ava
retto | 27.12.2007, 17:17 #
ну а если это простое сообщение типа "хай, как дела?"... как определить что это сообщение а не имя файла?
ava
1stain | 27.12.2007, 17:37 #
сначала пишем заголовок, фиксированного размера, в котором определяется что передаем. При приеме сначала читаем этот заголовок и дальше в зависимости от типа контента делаем что надо с телом сообщения.
ava
retto | 27.12.2007, 17:47 #
то есть надо создать типа идентификатора для сообщения и для файла?
понял, спс, буду пробовать
ava
mr.DUDA | 27.12.2007, 19:27 #
Простейший вариант - читать байты пока не встретится 0, в кодировке ASCII это признак конца строки.
ava
retto | 28.12.2007, 16:27 #
а если юникод?
можно просто файлы отсылать по одному порту, а сообщения по - другому. На сколько я знаю так устароенна знаменитая аська smile
таким способом ненадо будет делать лишних операций с определением сообщения и файла. но зато надо будет прослушивать сразу два порта
ava
mr.DUDA | 29.12.2007, 11:49 #
Если юникод - конвертировать строку в байты Encoding.UTF8.GetBytes(str), и перед строкой передавать длину строки в байтах (int). На клиенте читать int, потом массив со строкой, конвертировать обратно в string. Кодировку можно выбрать любую, хоть UTF8, хоть длинный Unicode, главное чтобы на клиенте и сервере совпадало.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  mr.DUDA   1stain   retto
advanced
Submit