UDP программа

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

UDP программа

Сообщение strelec » 14.01.2011 (Пт) 15:05

добрый времени суток всем , мне надо делать программу который создает север на локальном ип и соединяется с удаленным сервером .то что принимает сервер с локальки передает на удаленный сервер и обратно .что-то вроде транспорта или как назвать хз _)))
сам написал но ест проблема знающие люди прошу помочь
Код: Выделить всё
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading

Module Module1
    Dim z As New ThreadStart(AddressOf receive_server)
    Dim z1 As New Thread(z)
    Dim c As New ThreadStart(AddressOf receive_Client)
    Dim c1 As New Thread(c)
    'Client
    Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
    Dim broadcast As IPAddress = IPAddress.Parse("217.11.160.16")
    Dim ep As New IPEndPoint(broadcast, 27015)
    'Server
    Private Const listenPort As Integer = 27015
    Dim listener As New UdpClient(listenPort)
    Dim serip As IPAddress = IPAddress.Parse("192.168.1.10")
    Dim groupEP As New IPEndPoint(serip, listenPort)
    Public Function Send_client(ByVal sendbuf() As Byte) As Integer
        s.SendTo(sendbuf, ep)
    End Function
    Sub receive_Client()
        Try
            Do While True
                If s.Connected Then
                    Dim sendbuf(255) As Byte
                    s.Receive(sendbuf)
                    send_server(sendbuf)
                Else
                    s.Connect(ep)
                End If
            Loop
        Catch ex As Exception
            Console.WriteLine("ошибка Client > > > " & ex.ToString)
            c1.Abort()
            z1.Abort()
        End Try
    End Sub
    Sub receive_server()
        Try
            Do While True
                Dim bytes As Byte() = listener.Receive(groupEP)
                Send_client(bytes)
            Loop
        Catch e As Exception
            Console.WriteLine("ошибка Server > > > " & e.ToString())
            c1.Abort()
            z1.Abort()
        Finally
            listener.Close()
        End Try
    End Sub
    Sub send_server(ByVal sendbuf() As Byte)
        listener.Send(sendbuf, sendbuf.Length, groupEP)
    End Sub
    Sub Main()
        Console.WriteLine("server zapushen")
        z1.Start()
        Console.WriteLine("client zapushen")
        c1.Start()
    End Sub
End Module


ошибку выдает такой

ошибка Client > > > System.Net.Sockets.SocketException: Сообщение, отправленное
на сокет датаграмм, было больше, чем буфер внутренних сообщений или был превышен
иной сетевой параметр. Также возможно, что буфер для принятия сообщения был мен
ьше, чем размер сообщения
в System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size,
SocketFlags socketFlags)
в System.Net.Sockets.Socket.Receive(Byte[] buffer)
в udp_mintext.Module1.receive_Client() в D:\Documents and Settings\admin\Loca
l Settings\Application Data\Temporary Projects\udp_mintext\Module1.vb:строка 29


проблема тут
Код: Выделить всё
Dim sendbuf(255) As Byte
s.Receive(sendbuf)


массив sendbuf больше чем надо .вот и вопрос что делать ? .как заранее узнать какой размер пакета пришло ?


заранее всех благодарю

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: UDP программа

Сообщение Joo » 14.01.2011 (Пт) 16:30

Код: Выделить всё
l= s.Receive(sendbuf)

В l будет кол-во считанных байт
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

Re: UDP программа

Сообщение strelec » 14.01.2011 (Пт) 17:19

Joo писал(а):
Код: Выделить всё
l= s.Receive(sendbuf)

В l будет кол-во считанных байт


да но ето надо знать до того как я запишу в сендбафф
пробовал и так но ошибка тоже самое остается _)
Код: Выделить всё
Do While True
                If s.Connected Then
                    Dim sendbuf(255) As Byte
                    Dim n As Integer
                    n = s.Receive(sendbuf)
                    ReDim Preserve sendbuf(n)

                    send_server(sendbuf)
                Else
                    s.Connect(ep)
                End If
            Loop


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: SemrushBot и гости: 19

    TopList