VS2010下编写基于TCP的网络应用程序运行出现乱码,一堆“烫”字,求高手救命

客户端:
#include
#include
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
    return;
}


if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 ) {
        WSACleanup( );
        return; 
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];
recv(sockClient,recvBuf,100,0);
recvBuf[100]='\0';
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);
WSACleanup();

}
服务器端:
#include
#include
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
    return;
}


if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 ) {
        WSACleanup( );
        return; 
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
    SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
    char sendBuf[100];
    sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
        inet_ntoa(addrClient.sin_addr));
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    char recvBuf[100];
    recv(sockConn,recvBuf,100,0);
    recvBuf[100]='\0';
    printf("%s\n",recvBuf);
    closesocket(sockConn);
}

}

将 recvBuf 变量的内容在定义后,使用前请清零。

一堆“烫”字是很经典的错误,因为VC++的调试程序在运行的时候会将分配的内存全部初始化为0xCC,而0xCCCC正好是烫的内码。
这个错误说明你的数据没有正确写入内存。

数组没有初始化,编译器帮你默认初始化。或者数组越界。
主要就是检查你的发送,接收数据格式。最好都用字符数组