Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2011, 16:03   #1
yazy4nik
Пользователь
 
Регистрация: 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();
}
yazy4nik вне форума Ответить с цитированием
Старый 12.07.2011, 16:30   #2
yazy4nik
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 10
По умолчанию

разобрался. Ошибка была в том, что закрывал соединение и сокет на стороне клиента.
yazy4nik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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