Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Передача данных с одного компьютера на другой Добавлено: 26.07.10 13:25  

Автор вопроса:  Uhehesh | Web-сайт: mda.net.ru
Привет снова, VBNet.ru!
Взялся я за программирование на C# более серьёзно. :)

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

Я искал примеры в интернете, но ничего нужного мне не нашёл - одни сложные примеры с большим количеством не нужных мне свистелок и...

Если кто знает, где можно найти простой пример на эту тему на VB.net или C# (что желательно) - напишите в эту темку, пожалуйста.

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 26.07.10 13:36
Гугли WCF

Ответить

Номер ответа: 2
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #2
Добавлено: 26.07.10 13:59
Хм...
Может, попробовать что-то потрадиционней? :)
А то мне кажется, что это немного не то, что мне нужно.
(Может и то.)

Немного поподробнее:
Мне нужно создать клиент и сервер. Клиент сможет отправлять сообщения серверам, находящимся в онлайне (это не так сложно, у меня уже есть решение). Сервер должен прочитать сообщение и выполнить действие, а также отправить сообщение в ответ.
Я читал на MSDN про сокеты, но так ничего и не понял. :(
Всё довольно запутанно...

Вот, к примеру, некоторые строки моего кода:
  1. Socket ha = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
  2. byte[] ho = new byte[256];
  3. ha.Connect(System.Net.IPAddress.Parse("127.0.0.1"), 1024);
  4. ha.Shutdown(SocketShutdown.Both);
  5. ha.Close();


Исключение на третьей строке:
"Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 127.0.0.1:1024"
Значит, нужно добавить кое-что ещё...

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 26.07.10 14:13
System.Net.Sockets.Socket
System.Net.Soclets.TcpListener + System.Net.Sockets.TcpClient
System.Net.HttpListener + System.Net.WebClient + System.Net.HttpWebRequest
.NET Framework Remoting
WCF

Если на сервере приложение можно захостить в IIS, можно сделать через ASP .NET Web Services, это один из самых простых в реализации вариантов.

Ответить

Номер ответа: 4
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #4
Добавлено: 26.07.10 15:27
За рекомендацию использования TcpListener и TcpClient - большое спасибо.
Вроде бы, получается. :)

Ответить

Номер ответа: 5
Автор ответа:
 Alex



Вопросов: 7
Ответов: 73
 Профиль | | #5 Добавлено: 26.07.10 17:38
Попробуй:
http://msdn.microsoft.com/en-us/library/w89fhyex.aspx
http://www.canbal.com/index.php?/Using-C-Sharp/msdn-example-of-asynchronous-clientserver-socket.html

Ответить

Номер ответа: 6
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #6
Добавлено: 26.07.10 18:34
Спасибо, попробую...
А то из-за моей криворукости на этот раз не вышло, может, мне помогут примеры...

Ответить

Номер ответа: 7
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #7
Добавлено: 27.07.10 16:08
Привет всем.
Это вновь я.

Большое спасибо Alex за подсказку, это действительно помогло.
Но... (я знаю, вы ожидали это слово) у меня никак не получается отправить файл в виде байтов. Каждый раз разная ошибка.
Как мне передать файл в виде байтов?

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 27.07.10 17:05
Считываешь файл в байтовый массив, передаешь в NetworkStream (или что ты там используешь).
На приемнике принимаешь даныне из NetworkStream, сохраняешь на диск.

Ответить

Номер ответа: 9
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #9
Добавлено: 27.07.10 17:21
NetworkStream не использую. :)
Я передавал байты, но что-то ничего не получалось.

Может, где-то есть хороший пример?

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 27.07.10 20:04
Вот набросал.
Поток клиента считывает файл с диска, отправляет по TCP в поток сервера, он сохраняет файл на диск.

  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Sockets;
  5.  
  6. namespace ConsoleApplication9
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             System.Threading.Thread serverThread = new System.Threading.Thread(ServerThread) { IsBackground = true };
  13.             System.Threading.Thread clientThread = new System.Threading.Thread(ClientThread) { IsBackground = true };
  14.             serverThread.Start();
  15.             clientThread.Start();
  16.  
  17.             Console.WriteLine("Press any key to exit");
  18.             Console.ReadLine();
  19.         }
  20.  
  21.         private static void ServerThread()
  22.         {
  23.             TcpListener listener = new TcpListener(IPAddress.Any, 777);
  24.             listener.Start();
  25.             Console.WriteLine("Server: started");
  26.  
  27.             TcpClient client = listener.AcceptTcpClient();
  28.             Console.WriteLine("Server: client connected");
  29.  
  30.             using (Stream stream = client.GetStream())
  31.             using (BinaryReader reader = new BinaryReader(stream))
  32.             {
  33.                 int fileLength = reader.ReadInt32();
  34.                 byte[] fileData = reader.ReadBytes(fileLength);
  35.                 File.WriteAllBytes(@"c:\2.rtf", fileData);
  36.             }
  37.             Console.WriteLine("Server: file recived");
  38.             listener.Stop();
  39.         }
  40.          
  41.         private static void ClientThread()
  42.         {
  43.             TcpClient client = new TcpClient("localhost", 777);
  44.             Console.WriteLine("Client: conected to server");
  45.             using (Stream stream = client.GetStream())
  46.             using (BinaryWriter writer = new BinaryWriter(stream))
  47.             {
  48.                 byte[] fileData = File.ReadAllBytes(@"c:\1.rtf");
  49.                 writer.Write(fileData.Length);
  50.                 writer.Write(fileData);
  51.             }
  52.             Console.WriteLine("Client: file sent");
  53.         }
  54.     }
  55. }

Ответить

Номер ответа: 11
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #11
Добавлено: 27.07.10 20:33
Скорее, не набросал, а откуда-то взял. :)
Ну ладно, сейчас попробую...

Ответить

Номер ответа: 12
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #12
Добавлено: 27.07.10 21:09
О!
Всё работает, спасибо.
Раньше программа каким-то образом портила файлы, сейчас исправно передаёт. Причём не очень медленно, а довольно-таки шустро. :)
Огромное спасибо Artyom.

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 27.07.10 21:24
Скорее, не набросал, а откуда-то взял.

за такое,беспочвенное обвинение, можно и в глазурь получить..

Ответить

Номер ответа: 14
Автор ответа:
 Uhehesh



Вопросов: 4
Ответов: 42
 Web-сайт: mda.net.ru
 Профиль | | #14
Добавлено: 27.07.10 21:38
за такое,беспочвенное обвинение, можно и в глазурь получить..

Ого! Столько проектов с одинаковыми именами и похожими экшнами.
Меня забанили в гугле. :(

Извиняюсь, мне было плохо, поэтому я поленился проверить дальше.

Ответить

Номер ответа: 15
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #15 Добавлено: 27.07.10 23:06
Uhehesh пишет:
Скорее, не набросал, а откуда-то взял.


Ничего себе предъява!
Пруфлинк в студию если ты так считаешь.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам