2013-01-28 2 views
0

Я пытаюсь получить имена пользователей в списке, который находится в строковом формате. То, что я хочу сделать, это получить эти имена пользователей и сохранить их в массиве строк и отправить их по сети, чтобы получающая часть могла извлечь их и поместить эти имена пользователей в список.Отправка массива строк по сети

Но проблема в том, что у меня плохое время отправки массива строк по сети. Я знаю, как отправить строку по сети, но я не знаю, как отправлять и массивы строк по сети.

Что я думаю, может быть, я должен использовать цикл для хранения и извлечения строк? Но я точно не знаю, как это сделать.

Вот мой код для отправки.

'Say, this array contains the following strings 
Dim strData() As String = {"Dog", "Cat", "Mouse"} 

If networkStream.CanWrite Then 

     'This is not the proper way. What should I do here? 
     Dim SentData As Byte() 

     SentData = Encoding.ASCII.GetBytes(strData) 

     NetworkStream.Write(SentData, 0, SentData.Length()) 

End If 

И вот мой код для получения.

Dim rcvData() As String 

If networkStream.CanWrite Then 

     'Again, I don't think this is the proper way of handling an array of strings. 
     Dim ByteData(ClientSocket.ReceiveBufferSize) As Byte 

     NetworkStream.Read(ByteData, 0, CInt(ClientSocket.ReceiveBufferSize)) 

     rcvData = Encoding.ASCII.GetString(ByteData) 

End If 
+0

ASCII.GetBytes не имеет перегрузку, которая принимает массив строк. Ваш код не компилируется – Steve

+0

Да, это именно та проблема. –

+0

Важно, чтобы вы не просто проигнорировали результат «NetworkStream.Read», так как вам не гарантировано получить все сообщения за один раз. –

ответ

1

ASCII.GetBytes не имеет перегрузки, которая принимает строковый массив. Перед преобразованием данных вам необходимо присоединиться к вашему массиву строк, а затем отправить одну строку.

Dim strData() As String = {"Dog", "Cat", "Mouse"} 

If networkStream.CanWrite Then 

    Dim toSend = String.Join(";", strData) 
    Dim SentData As Byte() 
    SentData = Encoding.ASCII.GetBytes(toSend) 
    NetworkStream.Write(SentData, 0, SentData.Length()) 
End If 

конечно, на приемном конце вы должны dejoin строку получили

Dim rcvData As String 

If networkStream.CanRead Then 
    Dim bytesReceived As Integer = 0 
    Dim ByteData(ClientSocket.ReceiveBufferSize) As Byte 
    Do 
     bytesReceived = networkStream.Read(ByteData, 0, CInt(ClientSocket.ReceiveBufferSize)) 
     rcvData = rcvData + Encoding.ASCII.GetString(ByteData, 0, bytesReceived) 
    Loop While networkStream.DataAvailable 
    Dim strData = rcvData.Split(";") 
End If 
+1

Вы игнорируете результат «NetworkStream.Read» и считаете, что читаете все сообщение за один раз. –

+0

Ничего себе! Это чисто гений! Спасибо за это. Я должен попробовать это. : D –

+0

@ DanielKelley Спасибо за это. Я буду помнить об этом. :) –

0

Вы знаете, как отправить одну строку, но не массив из них? Поэтому закодируйте массив в строке и отправьте , что. Попробуйте JSON (см. How can I JSON encode an array in VB.NET?) или XML.

+0

Кодировать массив в строке? Это звучит чуждо мне, но я постараюсь посмотреть на это. –

Смежные вопросы