2015-05-16 3 views
0

У меня есть программа, которая запускает tcp-сокет. Он отлично работает на чем-либо ниже Windows 8.1. Я уже отключил свой брандмауэр и установил все, чтобы разрешить это соединение.C# tcp socket (networkstream.read не работает с 8.1)

1.Первый сервер запускается на окнах 8.1
2. Клиентский сокет подключается.
3. Клиент отправляет строку «login», чтобы инициировать начальное взаимодействие.
-что эта строка отправляется.
4.Создание соединения не выполняется, если сервер настроил networkstream.read();
-Я ничего отладчик не видит, и снова она отлично работает на другом
-систем

вот как настроить сервер я слушать. Это довольно традиционно.

// СЛУШАЕТ КЛИЕНТ

public String listen() { 

      byte[] bytesFrom = new byte[10025]; 
      string dataFromClient = null; 


      NetworkStream networkStream = this.clientSocket.GetStream();//get client input 


     This is the line that fails{ 
      networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);//read client info } -end fail 

      dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);//pass client input to String 
      dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));//parse to end 
      //MessageBox.Show("data:" + dataFromClient); 
      networkStream.Flush(); 
      // networkStream.Close(); 
      MessageBox.Show("data:" + dataFromClient); 
      return dataFromClient; 
     } 
+1

Определить «не удается» ... это исключение? Какое исключение? Не возвращает ли он данные? глядя на код, как вы знаете, сколько байтов было возвращено, так как вы не фиксируете возвращаемое значение из Read? –

+0

В этом проблема, это ломает попытку/уловку. но все время я запускаю его из компилятора, я ничего не вижу в отладке. И я все это время пробовал. фактически я занимаюсь данными. См. Bytesform на следующей строке –

ответ

0

создать буфер с clientSocket.ReceiveBufferSize так изменить:

byte[] bytesFrom = new byte[10025]; 

в:

byte[] bytesFrom = new byte[clientSocket.ReceiveBufferSize]; 

конца получить от этого размера буфера массива:

networkStream.Read(bytesFrom, 0, bytesFrom.Length); 
+0

Cageman freaking rocks. Это работало как шарм. Я вошел в систему и нажал инвентарь на Windows 8. Удивительный материал. –

+0

Почему имеет значение, что я предопределяю массив или позволяю клиенту определить его? Я получаю, что есть проблема, если клиент выходит за рамки, но кажется, что он должен работать и работает на xp, vista и 7. Является ли еще пример инженеров Windows 8.1, говорящих, что получение его от клиента является лучшей практикой, поэтому вам больше не разрешается предопределять массив? –

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