윈도우즈 작업관리자의 [프로세스]탭에 보시면 제작하신 프로그램의 프로세스가 떠 있을 겁니다.
그걸 선택하고 마우스 우클릭 눌러 보시면 하단에 [우선순위설정]이 있습니다.
그리고
http://www.wireshark.org/ 요기 가보면 Wireshark라는 프로그램을 다운 받을수 있습니다.
이 프로그램을 이용하시면, PC가 라우터에서 올라오는 패킷을 정상적으로 받은 건지 못받은 건지,
PC는 받았는데 내 프로그램에서 처리를 못해준건지 등등 정확한 원인을 진단 할 수 있습니다.
수고하세요...
사루짱 님이 쓰신 글 :
: 수문장님 답변 감사드립니다.
: 우선 제가 너무 초보라서 글을 5번 넘게 읽어도 프로세스 우선순위라든지 이런말은 잘 모르겠네요 ㅜㅜ
: (공부를 더하고 질문을 드렸어야하는데 죄송합니다.)
:
: 우선 장비는 시리얼 통신만을 하고 있다고 합니다.
: 장비 관리쪽 사람에게 물어보니 시리얼 통신으로 올라와서 라우터에서 tcp컨버팅 되어서 나온다고 하더군요.
: (현장가서 확인을 못해서 확신하지는 못하지만)
:
: 프로그램 통신쪽으로는 너무 몰라서 이렇게 많은 분들께 폐를 끼치네요 ㅜㅜ
:
:
: 수문장 님이 쓰신 글 :
: : 너무나 많은 경우의 수가 많아서 뭐라 딱 찍을 수는 없지만, 한 가지 생각나는게 있어 말씀드립니다.
: :
: : 단순히 시리얼->TCP 컨버터를 사용하는 것이 아니라 장비 자체에 TCP소켓이 있어 이를 통해 데이터를
: :
: : 받는 것이라면, 동기화 문제일 수도 있습니다.
: :
: : 장비 업체에서 TCP를 직접 개발해서 사용하는 경우가 있는데, 이것이 간혹 문제를 일으키곤 하지요.
: :
: : PC쪽 프로그램의 프로세스 우선순위를 실시간으로 해놓고 받아보세요.
: :
: : 그렇게 해서 받아진다면 장비업체와 이야기를 좀 하셔야 할 듯 합니다.
: :
: : 그리고 윗분 말씀대로 'Wireshark' 같은거 하나 설치해서 보시면 금방 답이 나올듯 합니다.
: :
: : 사루짱 님이 쓰신 글 :
: : : 안녕하십니까.. 씨빌더 한지 얼마 안된 완전 초짜가 답답해서 이렇게 질문을 드립니다. ㅜㅜ
: : :
: : : 우선 장비에서 16Kbyte정도의 사진파일을 전송해주는데요. 이게 중간에 올라오다가 패킷이 잘리는것 같습니다.
: : : 원래 장비는 serial통신을 하는데 중간에 컨버팅 되어서 TCP통신으로 바껴서 올라오는 패킷입니다.
: : : 장비에서는 1Kbyte단위로 잘라서 보낸다고 함(<-이건 확인을 할 방법이 없어서 ㅜㅜ)
: : :
: : : 검색을 해보니 TCP통신 특성상 패킷크기가 네트워크 상황에 따라서 다르게 날라와서 그걸 안정적으로 받기 위해서
: : : 스레드를 사용해서 받아야 한다고 들었는데요 (<-이것도 맞는지 잘 모르겠네요 ㅜㅜ)
: : :
: : : 8Kbyte이하의 메세지 같은 경우는 이상 없이 처리가 되는데요
: : : 큰용량의 파일이 올라오면 CRC체크까지 가지도 않는것으로 봐서
: : : 중간에 대기를 타는 거 같기도 하거든요.
: : :
: : : 그리고
: : : OnClientRead 함수가 데이터 처리중에 몇번 호출되는걸로 봐서 TCP에서 기본적으로 패킷 길이가 길면 스레드를 생성해서 처리를 해준다고 들었는데요 (<- 이것도 그냥 검색하다 본거라서 확실히 모르겠네요.)
: : :
: : : 너무 개념적으로도 모르는게 많아서 이것저것 궁금한거 다적다 보니 말이 이상해졌는데요.
: : : 핵심내용만 적으면요..
: : :
: : : - TCP통신을 할때 대용량의 패킷을 안정적으로 받으려면 어떤식으로 하는것이 좋은지 알려주셨으면 합니다.
: : : - 밑에 소스에서 통신상에 어떤 문제가 있는지 좀 지적 해주셨어면 합니다.
: : :
: : : 고수님들의 관심어린 답변 부탁드립니다 ㅜㅜ
: : :
: : : void __fastcall TfrmMain::OnClientRead(TObject *Sender, //<-처음 패킷을 받는 함수같은데요.
: : : TCustomWinSocket *Socket)
: : : {
: : : IsMemory(Socket);
: : : IsErrorMsg(ReadClientData(Socket),"ReadClientData");
: : : }
: : :
: : : Error_Code TfrmMain::ReadClientData(TCustomWinSocket *pClientSocket)
: : : {
: : :
: : : IsSocketEx(pClientSocket);
: : : uchar* tmpData;
: : :
: : : uint16 nDataLen = 0;
: : : uint16 nIndex = 0;
: : :
: : : IsErrorEx((Error_Code)FindSocketIdx(pClientSocket, &nIndex));
: : :
: : : nDataLen = pClientSocket->ReceiveLength();
: : :
: : : tmpData = (unsigned char *)malloc(nDataLen * 2 + 10);
: : :
: : : pClientSocket->ReceiveBuf(tmpData, nDataLen);
: : :
: : : //데이터 처리부분
: : : ....
: : : ...
: : :
: : : }