C++ C++;对于某些输入,服务器/客户端回显附加到末尾的奇怪字符
对于我的echo服务器/客户机,当我的客户机与我的服务器对话时,在服务器echo的末尾总是有一些奇怪的额外字符 客户(发送): 服务器:C++ C++;对于某些输入,服务器/客户端回显附加到末尾的奇怪字符,c++,tcp,echo,C++,Tcp,Echo,对于我的echo服务器/客户机,当我的客户机与我的服务器对话时,在服务器echo的末尾总是有一些奇怪的额外字符 客户(发送): 服务器: rnet = recv(conn, recvbuf, recvbuflen, 0); if (rnet > 0) { srnet=send(conn, recvbuf, rnet, 0 ); if ( srnet== SOCKET_ERROR) { printf("[C
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: %d\n", 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
注意,每次输入“asdsa”时都会附加额外的p。而像“aaa”这样的其他输入是可以的
有什么想法吗?问题是在客户端,您在通过
printf
打印条目之前,没有通过\0
剪裁条目。试试这个:
char recvbuf [DEFAULT_BUFLEN];
while(rnet>0 && start) {
rnet = recv(conn, recvbuf, recvbuflen, 0);
if (rnet > 0 && rnet < DEFAULT_BUFLEN-1)
{
recvbuf[rnet] = '\0';
printf("[RECR %s] %s\n", ip.c_str(), recvbuf);
}
}
char recvbuf[DEFAULT_BUFLEN];
同时(rnet>0&&start){
rnet=recv(连接,recvbuf,recvbuflen,0);
如果(rnet>0&&rnet
我假设返回的
recv
值是接收到的缓冲区的长度。或者,如果您不确定是否有多余的缓冲区空间,则最好:
printf("[RECR %s] %.*s\n", ip.c_str(), rnet, recvbuf);
如何从
recvbuf
提取和显示字符串?@MM。抱歉没有包括这一点。补充!谢谢!工作得很有魅力。有趣的是,我以前试过,但没有成功。我猜我把rnet搞错了,因为rnet-1太蠢了!谢谢@用户1611132:很高兴能帮助你。
char recvbuf [DEFAULT_BUFLEN];
while(rnet>0 && start) {
rnet = recv(conn, recvbuf, recvbuflen, 0);
if (rnet > 0 && rnet < DEFAULT_BUFLEN-1)
{
recvbuf[rnet] = '\0';
printf("[RECR %s] %s\n", ip.c_str(), recvbuf);
}
}
printf("[RECR %s] %.*s\n", ip.c_str(), rnet, recvbuf);