Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
CrazyTSTer
0 / 0 / 0
Регистрация: 14.08.2009
Сообщений: 5
1

NetworkStream.Write, TcpClient, ошибка после третьего вызова записи

14.08.2009, 10:26. Просмотров 1472. Ответов 1
Метки нет (Все метки)

Доброго времени суток, подскажите пожалуйста в чем может быть проблема следующего кода?
Код
private TcpClient         Client;
public static string       IPAddress;
public static int           PortNumber;
private NetworkStream netStream;
byte[]                       _streamData;
...
private void Connect()
{
     Client=new TcpClient();
     Client.Connect(IPAddress, PortNumber);
     netStream = Client.GetStream();
}
....
private void SendData()
{
     string data;
     string RequestHeader;
     string toSend;

     data = "<?xml version=" + (char)34 + "1.0" + (char)34 + " encoding=" + (char)34 + "UTF-8" + (char)34 + "?>";
      
     data += "<methodCall><methodName>system.listMethods</methodName><params></params></methodCall>" + (char)13 + (char)10;

     RequestHeader = "CONTENT_LENGTH" +(char)0+Convert.ToString(data.Length) +(char)0+"SCGI" +(char)0+"1"+(char)0;

     toSend = Convert.ToString(RequestHeader.Length) + ":" + RequestHeader + "," + data;

     if (netStream.CanWrite)
     {
          Byte[] sendBytes = Encoding.UTF8.GetBytes(toSend);

          try
          {
               if (Client.Connected == true)
               {
                    netStream.Write(sendBytes, 0, sendBytes.Length);
                    netStream.Flush();
               }
          }
          catch (Exception ex)
          {
               MessageBox.Show(ex.InnerException.ToString() , "Error");
          }
     }
}
...
private void ReadData()
{
     StringBuilder msg;
     int bytes;

     _streamData = new Byte[4096];
     msg = new StringBuilder();
     bytes = 0;
     
     try
     {
           while (netStream.DataAvailable)
           {
                if (Client.Connected == true)
                {
                     bytes = netStream.Read(_streamData, 0, _streamData.Length);
                     msg.AppendFormat("{0}", Encoding.Default.GetString(_streamData, 0, bytes));
                }
           }
     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message.ToString(), "Error");
     }
     Thread.Sleep(1);
     textBox1.Text = Convert.ToString(msg);
}
Суть такая, вызываю сначала функцию Connect, далее по очереди вызываю функции SendData и ReadData, т.е. последовательность вызовов получается вот такая:

Connect - OK
SendData - OK
ReadData - OK
SendData - OK
ReadData - из потока ничего не получаем, но завершается без ошибок
SendData - вылетает со следующей ошибкой

Код
---------------------------
Error
---------------------------
System.Net.Sockets.SocketException: Программа на вашем хост-компьютере разорвала установленное подключение

   в System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)

   в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
---------------------------
ОК   
---------------------------
Подскажите где проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2009, 10:26
Ответы с готовыми решениями:

TcpClient, Sockets и бесконечный NetworkStream
У меня стоит задача реализовать общение с устройством, причем если будет разрыв...

Ошибка вызова потока "Адресат вызова создал исключения"
при создании потока и вызове метода из потока выдает ошибку &quot;Адресат вызова...

Ошибка при сохранении после чтения-записи в Excel
Добрый день! Имеется две кнопки, одна для записи в эксель, другая для чтения...

Продолжение работы метода после вызова из его кода второго
Здравствуйте, У меня возникла проблема такого плана. Первый метод вызывает...

Serialport.write и serialport.basestream.write - в чем разница
в чем разница между следующими способами отправки данных на ком-порт?:...

1
CrazyTSTer
0 / 0 / 0
Регистрация: 14.08.2009
Сообщений: 5
18.08.2009, 22:47  [ТС] 2
up!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2009, 22:47

После вызова Merge() вычисляемые поля не пересчитываются
Натолкнулся на следующую фишку Dataset'а: после вызова Merge() ВЫЧИСЛЯЕМЫЕ поля...

NetworkStream.ReadToEnd и NetworkStream.Write. Синхронизация
У меня наверное глупый вопрос, но все же спрошу: Может ли...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error).
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление...


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

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

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