|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.07.2011, 16:03 | #1 |
Пользователь
Регистрация: 01.12.2010
Сообщений: 10
|
TCP клиен-сервер теряются пакеты.
проблема в том, что var bytesRec = handler.Receive(buffer1); абсолютно без системы становица равно нулю(тоесть я так понял что от клиента ничего не получает). может принять от одного до 10 раз и все будет ок, а может принять только один раз и дальше одни нули, но на стороне клиента пакеты формируются и отсылаются как надо. Где может быть ошибка?
клиент: lock (serializableData1) { serializableData1.Add(pingHistory); if (serializableData1.Count == 20) { Console.WriteLine("Данные посланы."); var bf2 = new BinaryFormatter(); var memStr1 = new MemoryStream(); bf2.Serialize(memStr1, serializableData1); byte[] buffer2 = memStr1.GetBuffer(); var size = buffer2.Length; IPAddress ip2 = IPAddress.Parse("127.0.0.1"); int port2 = 2223; IPEndPoint ipEndPoint2 = new IPEndPoint(ip2, port2); var socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socketClient.Connect(ipEndPoint2); socketClient.Send(buffer2); socketClient.Shutdown(SocketShutdow n.Both); socketClient.Close(); serializableData1.Clear(); } } сервер: while (true) { var socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var buffer1 = new byte[10000]; int port1 = 2223; var ip1 = IPAddress.Any; var ipEndPoint1 = new IPEndPoint(ip1, port1); socketServer.Bind(ipEndPoint1); socketServer.Listen(1); Socket handler = socketServer.Accept(); var bytesRec = handler.Receive(buffer1); if (bytesRec != 0) { MemoryStream memSrt = new MemoryStream(100000); memSrt.Write(buffer1, 0, buffer1.Length); BinaryFormatter bf1 = new BinaryFormatter(); memSrt.Position = 0; pingHistory = (List<object>) bf1.Deserialize(memSrt); if (pingHistory.Count != 0) { Console.WriteLine("Данные получены."); foreach (PingHistory ping in pingHistory) { Console.WriteLine("Time={0}, val={1}", DateTime.Now, ping.Cur); } } } else Console.WriteLine("Received bytesRec==0"); pingHistory.Clear(); socketServer.Close(); } |
12.07.2011, 16:30 | #2 |
Пользователь
Регистрация: 01.12.2010
Сообщений: 10
|
разобрался. Ошибка была в том, что закрывал соединение и сокет на стороне клиента.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TCP/IP клиент -сервер | zhenya.ya | C/C++ Сетевое программирование | 10 | 05.03.2011 22:01 |
как создать TCP клиент, TCP сервер ? | DreamMaster911 | C/C++ Сетевое программирование | 1 | 26.10.2010 15:05 |
tcp сервер | Pall | Работа с сетью в Delphi | 5 | 02.12.2008 15:35 |
помогите разобраться с "Клиен и сервер" | Briz | Работа с сетью в Delphi | 3 | 04.11.2007 06:54 |
Клиен-Сервер.... (оч нужна помощь) | Черничный | Работа с сетью в Delphi | 7 | 01.02.2007 13:33 |