C++服务器/客户端回显某些输入末尾附加的奇怪字符

C++ Server/Client echo strange characters appended to the end for certain input

本文关键字:字符 输入 客户端 服务器 C++      更新时间:2023-10-16

对于我的回显服务器/客户端,当我的客户端与我的服务器通信时,服务器回显的末尾总是有一些奇怪的额外字符。

客户端(发送):

string input;
while(srnet>0&&start){
cout<<"[Enter to Send]..."<<endl;
 getline(cin,input);
 if(!strcmp(input.c_str(),"quit")) break; else
        srnet=send(conn, input.c_str(),input.length(), 0 );  
} 

客户端(接收中)

while(rnet>0&&start){
char* recvbuf=new char[DEFAULT_BUFLEN];
rnet = recv(conn, recvbuf, recvbuflen, 0);
    if (rnet > 0) printf("[RECR %s] %sn", ip.c_str(),recvbuf);  
    delete recvbuf;
    }     

服务器:

rnet = recv(conn, recvbuf, recvbuflen, 0);
    if (rnet > 0) {           
        srnet=send(conn, recvbuf, rnet, 0 );
        if ( srnet== SOCKET_ERROR) {
            printf("[COMM] send failed with error: %dn", WSAGetLastError());
            closesocket(conn);                
            break;
        }

输出:

dadada
[Enter to Send]...
[RECR localhost:4666] dadadap
fdsfdfd
[Enter to Send]...
[RECR localhost:4666] fdsfdfd
asdsa
[Enter to Send]...
[RECR localhost:4666] asdsap
asdsa
[Enter to Send]...
[RECR localhost:4666] asdsap
aaa
[Enter to Send]...
[RECR localhost:4666] aaa
asdsa
[Enter to Send]...
[RECR localhost:4666] asdsap

请注意,每次都会将额外的 p 附加到输入"asdsa"上。而其他输入如"aaa"很好。

有什么想法吗?

问题是在客户端,您没有在通过printf打印条目之前剪切条目。试试这个:

char recvbuf [DEFAULT_BUFLEN];
while(rnet>0 && start) {
    rnet = recv(conn, recvbuf, recvbuflen, 0);
    if (rnet > 0 && rnet < DEFAULT_BUFLEN-1)
    {
       recvbuf[rnet] = '';
       printf("[RECR %s] %sn", ip.c_str(), recvbuf);  
    }
}  

我假设 recv 的返回值是接收缓冲区的长度。

或者,如果您对拥有多余的缓冲区空间没有信心,则更好:

printf("[RECR %s] %.*sn", ip.c_str(), rnet, recvbuf);