저는 TCP를 통해 파일에서 호스트 컴퓨터로 제어 명령을 보내고 응답을받는 cpp에 콘솔 응용 프로그램을 작성하고 있습니다. 모든 정보가 화면에 표시되고 파일에 기록되며 이는 실제 문제입니다. 고정 길이를 설정하려고해도 출력 문자열에 어떤 이유로 든 정크가 저장되어있는 것으로 보입니다.C++ Winsock recv() buffer junk
편집 : 코드를 정리하고 recv()의 반환 값을 처리했습니다. 내가 아직 얻지 못하는 유일한 점은 내 로그 파일의 두 번째 recv 줄이 정크로 가득 차 있다는 것입니다. 어쩌면 너희 중 한 명이 문제를 발견 할 수있을 것이다.
string cmd="";
char *sendstr=(char*)cmd.c_str();
fflush(stdin);
int n = 1, total = 0;
char temp[1024];
string inStr;
if(cmdin.is_open())
{
while(!cmdin.eof())
{
total=0;
cmd=fread();
send(serverPC, sendstr, (int)strlen(sendstr),0);
n=recv(serverPC,&temp[total],sizeof(temp)-total-1,0); // FIX THIS
total+=n;
temp[total]='\0';
inStr=temp;
fwrite(inStr,cmd);
}
cout << "Data successfully sent!\n";
}
else{
cerr<<"can't find 'cmd.cfg' file"<<endl;
}
출력은 내가 기대 :
<11:40:00> INIT
received: VELO=0.00km/h DOT=FORW
----
이 내가 무엇을 얻을 :는 TCP 수신기를 작성할 때
<10:05:56> INIT
received: VELO=0.00km/h DOT=FORW
----
<10:05:56> VELO=50.00
received: VELO=0.00km/h DOT=FORW VELO=0.00km/h DOT=FORW VELO=0.00km/h
DOT=FORW VELO=0.00km/h DOT=FORW VELO=0.00km/h DOT=FORW VELO=0.00km/h DOT=FORW
VELO=0.00km/h DOT=FORW
----
<10:05:56> VELO=100.00
received: VELO=50.00km/h DOT=FORW
----
<10:05:56> DOT=BACK
received: VELO=50.00km/h DOT=FORW
데이터 처리와 별도의 네트워킹 지원. 코드를 함수로 나눕니다. 그런 다음 해당 기능을 사용하여 주 코드를 다시 작성하십시오. 그것이 읽히는 것은 매우 귀찮습니다. – Dariusz
나는 Dariusz와 기능에 대해 동의한다. 코드를 읽는 것은 매우 어렵습니다. 또한 tbuf의 길이에 대해 상수 값 대신 sizeof를 사용하거나 정의를 수행해야합니다. – DAB
동의해야합니다 ... 내 코드를 조금 엉망으로 만든 것처럼 보입니다. – Madmob