Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
KoJIo63uK

Передача файла используя сокет

29.05.2013, 02:50. Показов 1296. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть клиент серверное приложение к сожалению сейчас код выложить не могу, но все же. Сервер получает запрос от клиента, на этот запрос сервер высылает файл используя Socket.sendFile(fileName);
Проблема в том что на клиенте не понимаю как мне получить этот файл и начать с ним работу.

Добавлено через 5 часов 41 минуту
Это код сервера
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public static void ReceiveCallback(IAsyncResult AsyncCall)
        {
 
            StreamReader sr = new StreamReader("configuration.txt");
            string sread = sr.ReadToEnd();
            string[] st = sread.Split(new Char[] { '|' });
            string DBname = st[0];
            string TBname = st[1];
            string TSname = st[2];
            string TSput = st[3];
 
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            
            Byte[] message = new Byte[6];
 
            Socket listener = (Socket)AsyncCall.AsyncState;
            Socket client = listener.EndAccept(AsyncCall);
            str = Encoding.Default.GetString(message);
            Console.WriteLine(str);
            
                str = Encoding.Default.GetString(message);
                Console.WriteLine("Принято соединение от: {0}", client.RemoteEndPoint);
                client.Receive(message);
                str = Encoding.Default.GetString(message);
                
 
                if (str == "get id")
                {
 
 
                    //*************************************
                    string ConnectionString = "Data Source=" + DBname + ";Version=3;New=True;Compress=True;";
                    SQLiteConnection conn = new SQLiteConnection(ConnectionString);
                    SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From example;", conn);
                    DataSet ds = new DataSet();
                    conn.Open();
                    da.Fill(ds);
                    //dataGridView1.DataSource = ds.Tables[0].AsDataView();
                    string sqlCommand = String.Format("UPDATE " + TBname + " SET '" + TSname + "' = '2' WHERE id = 7;");
                    SQLiteCommand command1 = new SQLiteCommand(sqlCommand, conn);
                    command1.ExecuteNonQuery();
                    conn.Close();
                    //***************************************
                    MemoryStream ms = new MemoryStream();
                    BinaryFormatter bf1 = new BinaryFormatter();
                    bf1.Serialize(ms, ds);
                    byte[] data = null;
                    data = ms.ToArray();
                    client.Send(data);
 
                }
 
 
                if (str == "get te") 
                {
                        
                    client.SendFile(TSput); //Тут то я и отправляю файл
                    
 
                }
 
                if (str == "send o")
                {
                    client.Receive(message);
                    str = Encoding.Default.GetString(message);
 
                }
 
            
 
                
            
           
            
 
            Console.WriteLine("Закрытие соединения");
            client.Close();
 
            
            listener.BeginAccept(new AsyncCallback(ReceiveCallback), listener);
        }
Код клиента
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
48
49
50
51
52
53
54
55
Socket client;
            config();
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect("127.0.0.1", 12346);
 
            
 
            string s = "get te";
            Byte[] b = Encoding.Default.GetBytes(s);
            client.Send(b);
            int size = (int)client.ReceiveBufferSize;
            /*Byte[] ReceivedBytes = new Byte[size];
            int byteCount = client.Receive(ReceivedBytes);
            NetworkStream output = new NetworkStream(client);
            output.Read(ReceivedBytes,0,size);*/
 
            MemoryStream memstr = new MemoryStream();
            //FileStream fs;
            
 
            while (true)
            {
                byte[] ReceivedBytes = new byte[size];
                int o = client.Receive(ReceivedBytes);
                if (o == 0)
                {
                    break;
                }
                memstr.Write(ReceivedBytes, 0, ReceivedBytes.Length);
            }
            //memstr.WriteTo(output);
            //fs.Close();
            memstr.Close();
            
 
            
 
 
 
 
            /*TcpClient clientT;
 
            clientT = new TcpClient();
            clientT.Connect("127.0.0.1", 12346);
 
 
            output = clientT.GetStream();*/
            
            //
 
            toolStripButton1.Enabled=false;
            toolStripButton2.Enabled = true;
            
            
            XmlTextReader xmlin = new XmlTextReader(output);
Как видно до этого я тестировал работу программы используя TcpClien где использовал метод GetStream и его спокойно помещал в NetworkStream. Хотелось бы узнать аналогию в сокетах. Забыл уточнить, файл на стороне клиента нельзя сохранять на диск.
Так же в коде клиента может быть объявлено много лишнего и что не используется абсолютно, это как раз мои попытки получить файл.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2013, 02:50
Ответы с готовыми решениями:

Передача файла через сокет
Итак... у меня сложилась одна затруднительная ситуация. Есть сервер, есть клиент. С передает К файл посредством client.SendFile(filename,...

Передача значений переменных через сокет
Добрый всем вечер. Вопрос: имеется клиент, он должен передать серверу 4 переменных. Сервер должен распознать эти 4 переменных отдельно, т.е...

TCP сокет. Передача больших файлов
Собственно пишу курсовую работу. Что-то на подобии DROPBOX. Передача файлов шифрование и всё такое) Реализовав сокет TCP у меня...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2013, 02:50
Помогаю со студенческими работами здесь

Передача файла через сокет
Всем привет! Создал клиент-сервер. Клиент должен передавать серверу определенные файлы, название которых (которого) ему передает сервер. ...

Передача файла через сокет
Проблема в том что файл восстанавливаемый на клиенте открывается хорошо. На сервере же массив байтов востанавливается, но файл не...

Передача двоичного файла через TCP сокет
Двоичный файл считывается клиентом и посылается серверу с помощью протокола TCP. Сервер его сохраняет. Все происходит на одной машине....

Передача текста в окно выбора файла используя PostMessage
При автоматизации web приложения возникла задача прикрепить файлы. Для этого в окно выбора файла нужно передать полный путь к файлу...

Одновременная передача клиенту (сокет)
Всем привет. В общем столкнулся с такой проблемой. Сервер посылает запросы клиенту, вроде как всё работает, клиент записывает в буфер...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru