나는 아주 이상한 버그가있어서 여기에 대해서는 거의 알지 못하므로 나와 함께 참아주십시오.C# 비동기 수신은 시스템 전체의 네트워크 충돌을 일으 킵니다!
하드웨어를 연결하는 소켓이 있습니다. 나는 동기식으로 보내지 만 비동기식으로 수신한다.
나는 다음과 같은 코드를 통해 데이터를 전송 :
_dicSockets[lclIPEndPoint].Send(lclBytesSent, lclBytesSent.Length, SocketFlags.None);
다음과 같은 코드를 통해 나타납니다 하드웨어가 신속하게 응답 할 때
protected virtual void receiveCallback(IAsyncResult ar)
{
PFDoReceiveDataArgs receiveData = (PFDoReceiveDataArgs)ar.AsyncState;
Socket lclSocket = receiveData.MySocket;
etc...
이 제도는 십초 내에서 잘 작동합니다. 그러나 하드웨어가 응답하는 데 오래 걸리면 (약 5 분) 미친 문제가 발생합니다. 이 시간 동안 while 루프에있는 스레드가있어 명령이 응답을 받았는지 여부를 확인합니다.
이 시간 동안 하드웨어가 작동하고 작동한다는 것을 알고 있습니다. 명령을 보내면 5 분 후 응답이옵니다. 5 번 중 4 번은 문제가 없으며 모든 것이 예상대로 작동합니다. 동일한 명령, 동일한 하드웨어, 같은 모든 것 ...
5 회 중 1 회, 인터넷 연결이 끊긴 곳에서 시스템 전체에 네트워크 장애가 발생했습니다!
문제가 무엇인지 전혀 알지 못하므로 필자는 아이디어를 기다리고 필요한만큼 코드를 붙여 넣을 것입니다.
당신이 말하는 하드웨어는 무엇입니까? – RQDQ
"system-wide"란 네트워크에있는 모든 컴퓨터가 연결을 끊거나 코드를 실행하는 컴퓨터 한 대를 의미합니까? – Justin
코드를 실행하는 컴퓨터. – sbenderli