Это почти наверняка ошибка в вашем коде.Скорее всего, одна сторона считает, что истекло время ожидания другой стороны, и поэтому неправильно закрывает соединение.Чаще всего это происходит, когда вы вызываете функцию получения для получения данных, но на самом деле вы уже получили эти данные и просто не поняли их.Итак, вы ждете данные, которые вы уже получили, и, следовательно, время ожидания.
Например:
1) Клиент отправляет сообщение.
2) Клиент отправляет другойсообщение.
3) Сервер читает оба сообщения, но считает, что получил только одно, отправляет подтверждение.
4) Клиент получает подтверждение, ожидает второго подтверждения, который сервер никогда не отправит.
5) Сервер ожидает второго сообщения, которое фактически уже получено.
Теперь сервер ждет клиента, а клиент ждет сервера.Сервер был закодирован неверно и не осознавал, что фактически получил два сообщения за один раз.TCP не сохраняет границы сообщений.
Если вы расскажете мне больше о своем протоколе, я, вероятно, расскажу вам более подробно, что пошло не так.Что составляет сообщение?Какая сторона отправляет когда?Есть ли какие-либо подтверждения?И т. Д.
Но короткая версия такова, что каждая сторона, вероятно, ожидает другую.
Скорее всего, сброс соединения по одноранговому узлу является симптомом.Ваша проблема возникает, одна сторона тайм-аут и прерывает соединение.Это приводит к тому, что другая сторона получает сброс соединения, потому что другая сторона прервала соединение.