Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
konstantin0214
0 / 0 / 0
Регистрация: 20.05.2017
Сообщений: 57
Завершенные тесты: 1
#1

Найти ошибку - Visual Basic .NET

03.01.2018, 22:20. Просмотров 225. Ответов 5
Метки нет (Все метки)

Помогите. Я написал сервер:
vb.net
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
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Public Class Form1
    Dim TCPListenerz As TcpListener
    Dim TCPServer As Socket
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TCPListenerz = New TcpListener(IPAddress.Any, 1000)
        TCPListenerz.Start()
        TCPServer = TCPListenerz.AcceptSocket()
        TCPServer.Blocking = False
        Timer1.Enabled = True
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim buff(TCPServer.ReceiveBufferSize) As Byte
            TCPServer.Receive(buff)
            Dim mm As New MemoryStream
            mm.Write(buff, 0, buff.Length)
            PictureBox1.Image = System.Drawing.Image.FromStream(mm)
            PictureBox1.Image.Save("C:\Users\HOME\Desktop\000.png", System.Drawing.Imaging.ImageFormat.Png)
        Catch ex As Exception
        End Try
    End Sub
End Class
и клиент:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Imports System.Net
Imports System.IO
Public Class Form1
    Dim TCPClientz As Sockets.TcpClient
    Dim TCPClientStream As Sockets.NetworkStream
    Private Sub TextBox2_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox2.MouseClick
        OpenFileDialog1.ShowDialog()
    End Sub
 
    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
        TextBox2.Text = OpenFileDialog1.FileName
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TCPClientz = New Sockets.TcpClient(TextBox1.Text, 1000)
        TCPClientStream = TCPClientz.GetStream()
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim buff(TCPClientz.SendBufferSize) As Byte
        buff = File.ReadAllBytes(TextBox2.Text)
        TCPClientz.Client.Send(buff)
    End Sub
End Class
С клиента на сервер должна кидаться картинка, отображаться в PictureBox, а потом сохраняться на рабочий стол с именем "000.png". Но вот если картинка больше 500Кб, то она приходит не полностью, или вообще не приходит. Если кто сможет, найдите ошибку.
0
Миниатюры
Найти ошибку   Найти ошибку  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2018, 22:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти ошибку (Visual Basic .NET):

Найти ошибку
Не пойму где я накасячил ? Если программа работает EthDcrMiner64 то...

Надо найти ошибку...
Добрый день, дорогие программисты! Пишу курсач "Преломление/отражение света в...

Найти синтаксическую ошибку в коде
Здравствуйте, уважаемые программисты, не могли бы вы мне помочь? У меня...

Не могу найти ошибку в простом коде
Здравствуйте! Я не могу найти ошибку в коде: Imports...

Как найти ошибку записи файла?
При записи в файл с помощью Dim запись As New StreamWriter("kv.dat", False) ...

Найти ошибку в коде расчетной программы
Написал маленьку расчетную программу. но она почему то всегда выдает ноль....

5
_Radik_
26 / 26 / 3
Регистрация: 18.01.2014
Сообщений: 142
04.01.2018, 16:44 #2
Цитата Сообщение от konstantin0214 Посмотреть сообщение
Dim buff(TCPClientz.SendBufferSize) As Byte
По-моему здесь, в 20 строке клиента. В этой строке вы объявляете массив с фиксированным размером, а файл-картинка может быть любого размера.
0
konstantin0214
0 / 0 / 0
Регистрация: 20.05.2017
Сообщений: 57
Завершенные тесты: 1
04.01.2018, 16:52  [ТС] #3
Стёр TCPClientz.SendBufferSize , но все равно картинка приходит не полностью.
0
_Radik_
26 / 26 / 3
Регистрация: 18.01.2014
Сообщений: 142
04.01.2018, 17:25 #4
Ну, попробуйте, тогда, сначала из массива создать файл (в сервере):

vb.net
1
 My.Computer.FileSystem.WriteAllBytes("C:\Users\HOME\Desktop\000.png", buff, False)
А потом уж открывать его и присваивать Picturebox:

vb.net
1
PictureBox1.Image = System.Drawing.Image.FromFile("C:\Users\HOME\Desktop\000.png")
0
konstantin0214
0 / 0 / 0
Регистрация: 20.05.2017
Сообщений: 57
Завершенные тесты: 1
29.01.2018, 21:40  [ТС] #5
_Radik_, все равно не работает. Вроде дело не в том, что тут карт инка не сохраняется, а в том, что она уже приходит не полностью.
0
_Radik_
26 / 26 / 3
Регистрация: 18.01.2014
Сообщений: 142
29.01.2018, 21:52 #6
А в 17 строке сервера тоже убрали размерность массива?

vb.net
1
Dim buff(TCPServer.ReceiveBufferSize) As Byte
потому что, если TCPServer.ReceiveBufferSize рассчитан только на 500кб, то большее число байтов он в себя не сможет принять.

Этой строкой

vb.net
1
2
 
mm.Write(buff, 0, buff.Length)
, а именно buff.Length вы указываете программе сколько байтов нужно считать из массива, а это число ровно именно TCPServer.ReceiveBufferSize.

Так что, если не было вышеуказанных исправлений в сервере, то получается что с клиента отправляется полный массив байт этого файла (при условии, что вы исправили то, о чем я говорил выше), а сервер принимает только столько байтов, сколько указано в TCPServer.ReceiveBufferSize
0
29.01.2018, 21:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2018, 21:52
Привет! Вот еще темы с решениями:

Найти ошибку в коде (Создание и считывание из файла)
Не могу найти ошибку, выпадает - "Процесс не может получить доступ к файлу так...

Помогите найти ошибку: No data exists for the row/column
Получаю ошибку No data exists for the row/column. Вот мой код: Private...

Вывод оценки в программе для прохождения тестов, найти ошибку в коде
Приветствую всех, пытаюсь сделать в программе для прохождения тестов вывод...

Не могу найти ошибку в коде проверки что число начинается и заканчивается одной цифрой
Dim n, a, b As Single n = Val(TextBox1.Text) a = n ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru