Winsock. Методы SendData - GetData

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Счастливый кот!
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 16.11.2008 (Вс) 21:32

Winsock. Методы SendData - GetData

Сообщение Счастливый кот! » 16.11.2008 (Вс) 21:47

Всем доброго времени суток!

Решил я написать простую программку и сразу столкнулся с проблемой. Программа для передачи файлов по сети, решил использовать winsock.

Вот код принимающей части, может кому будет интересно, реализация пересылки данных.

На форме кнопка + winsock
Код: Выделить всё

Private Sub Command1_Click()
tcpClient.RemoteHost = "127.0.0.0"
tcpClient.RemotePort = "80"
tcpClient.Connect ' установка соединения
End Sub

Private Sub tcpClient_DataArrival _ '
(ByVal bytesTotal As Long)
Dim A As String

tcpClient.GetData A 'Получение данных

Open "d:\log.txt" For Binary As #1 'Открытие файла и запись в него
Put #1, , A
Close #1

End Sub


Отправляющаяя часть программы: на форме только winscok.

Код: Выделить всё
Private Sub Form_Load()
tcpServer.LocalPort = 80 'Ожидание входящего соединения
tcpServer.Listen
End Sub

Private Sub tcpServer_ConnectionRequest _ "Если соединение установлено
(ByVal requestID As Long)
If tcpServer.State <> sckClosed Then _
tcpServer.Close
tcpServer.Accept requestID

Dim A As String

Open "d:\test.txt" For Input As #1 'Прочитать даннные и послать их

A = Input$(LOF(1), 1)
tcpServer.SendData A
Close #1

End Sub


К сожалению не все так хорошо. Пересылаються только 8Кб.

Разьясните пожалуйсто где я неправильно сделал

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Winsock. Методы SendData - GetData

Сообщение Debugger » 16.11.2008 (Вс) 21:58

Ну так нельзя. Посылай файл кусками. Что посылается только 8 кб - нормально.

Счастливый кот!
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 16.11.2008 (Вс) 21:32

Re: Winsock. Методы SendData - GetData

Сообщение Счастливый кот! » 16.11.2008 (Вс) 22:41

Я пробовал обьявить массив и использовал seek для записи всего файла по частям, но больших успехов не добился. Не обьяснишь как граматно разбить? Буду очень благодарен!

P.S. Очень странно что 8 кб. Если считывать из файла так:
Код: Выделить всё
whlie not EOF(1)
line input #1, A
B=B+A
wend


И посылая переменную B, получал передачу достаточно большого файла - но устойчивости так и не добился :(

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Winsock. Методы SendData - GetData

Сообщение iGrok » 16.11.2008 (Вс) 22:50

Счастливый кот! писал(а):Я пробовал обьявить массив и использовал seek для записи всего файла по частям, но больших успехов не добился. Не обьяснишь как граматно разбить? Буду очень благодарен!

P.S. Очень странно что 8 кб. Если считывать из файла так:
Код: Выделить всё
whlie not EOF(1)
line input #1, A
B=B+A
wend


И посылая переменную B, получал передачу достаточно большого файла - но устойчивости так и не добился :(

Ну..
Если файлы в принципе небольшие, можно считать файл целиком, после чего делать отсылку кусками.. По 1кб к примеру.
А на месте склеивать, и писать целиком. Только нужно придумать, как ты будешь обозначать конец файла / передачи.

Если большие - лучше делать чтение кусками и сразу передавать. А на месте так же кусками писать.

В любом случае лучше использовать бинарные чтение/запись файла, а не текстовые.
(Open ... For Binary, Get, Put)

UPD:
Разбить.. Ну если работаешь со строками, то хоть Mid$. Если с массивом байт, то проще будет уже читать кусками.
label:
cli
jmp label

Счастливый кот!
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 16.11.2008 (Вс) 21:32

Re: Winsock. Методы SendData - GetData

Сообщение Счастливый кот! » 16.11.2008 (Вс) 23:30

Огромное спасибо! Строки разбить не проблема, но нужно передовать данные с сервера не только в txt формате. В этом и проблема как разбить, а потом грамотно склеять бинарную переменную.... :( Буду пытаться все же обьявлять массив и передовать частями этого массива!

P.S. Буду очень благодарен за любые идеи!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Winsock. Методы SendData - GetData

Сообщение iGrok » 17.11.2008 (Пн) 0:27

Счастливый кот! писал(а):Огромное спасибо! Строки разбить не проблема, но нужно передовать данные с сервера не только в txt формате. В этом и проблема как разбить, а потом грамотно склеять бинарную переменную.... :( Буду пытаться все же обьявлять массив и передовать частями этого массива!

P.S. Буду очень благодарен за любые идеи!

Нуу..
Код: Выделить всё
Dim fNum As Long, fNum2 as Long
Dim s As String
Dim offset As Long, length as Long
offset = 1
length = 1024
fNum = FreeFile()
Open FileName For Binary As fNum
fNum2 = FreeFile()
Open FileName2 For Binary As fNum2
    Do
        s = Space(length)
        Get #fNum, offset, s
        offset = offset + length

        'Debug.Print s
        'тут делаешь отправку данных
        Put #fNum2, , s

    Loop While Not EOF(fNum)
Close fNum
Close fNum2

Например, так.
Это простой пример поблочного копирования файла. Без контроля длины блоков, и.т.п.
Тут и чтение блоками и запись блоками показаны..
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Winsock. Методы SendData - GetData

Сообщение alibek » 17.11.2008 (Пн) 9:08

Debugger писал(а):Ну так нельзя. Посылай файл кусками.

Можно. И не надо посылать кусками.
Lasciate ogni speranza, voi ch'entrate.

Счастливый кот!
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 16.11.2008 (Вс) 21:32

Re: Winsock. Методы SendData - GetData

Сообщение Счастливый кот! » 17.11.2008 (Пн) 17:11

Благодарю iGroka за написания части кода. Вопрос закрыт - если кому то будет интересно реализация передачи данных (Частями, а можно и целиком) по сети прикрепляю исходный код.
Вложения
Передача файла по сети.zip
(3.48 Кб) Скачиваний: 132

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Winsock. Методы SendData - GetData

Сообщение tyomitch » 18.11.2008 (Вт) 17:26

alibek писал(а):
Debugger писал(а):Ну так нельзя. Посылай файл кусками.

Можно. И не надо посылать кусками.

+1

Надо посылать целиком, а при приёме склеивать куски.
Изображение

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Winsock. Методы SendData - GetData

Сообщение awl100Alex » 20.11.2008 (Чт) 22:48

Счастливый кот!
Посмотри здесь...
viewtopic.php?f=1&t=38026
в конце...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 88

    TopList