问题描述
- VS2010下编写基于TCP的网络应用程序运行出现乱码,一堆“烫”字,求高手救命
- 客户端:
#include
#include
#pragma comment(libws2_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_INETSOCK_STREAM0);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*)&addrSrvsizeof(SOCKADDR));char recvBuf[100];recv(sockClientrecvBuf1000);recvBuf[100]='';printf(""%sn""recvBuf);send(sockClientThis is lisi""strlen(""This is lisi"")+10);closesocket(sockClient);WSACleanup();
}
服务器端:
#include
#include
#pragma comment(libws2_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_INETSOCK_STREAM0);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*)&addrSrvsizeof(SOCKADDR));listen(sockSrv5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1){ SOCKET sockConn=accept(sockSrv(SOCKADDR*)&addrClient&len); char sendBuf[100]; sprintf(sendBufWelcome %s to http://www.sunxin.org"" inet_ntoa(addrClient.sin_addr)); send(sockConnsendBufstrlen(sendBuf)+10); char recvBuf[100]; recv(sockConnrecvBuf1000); recvBuf[100]=''; printf(""%sn""recvBuf); closesocket(sockConn);}
}
解决方案
一堆“烫”字是很经典的错误,因为VC++的调试程序在运行的时候会将分配的内存全部初始化为0xCC,而0xCCCC正好是烫的内码。
这个错误说明你的数据没有正确写入内存。
解决方案二:
将 recvBuf 变量的内容在定义后,使用前请清零。
解决方案三:
数组没有初始化,编译器帮你默认初始化。或者数组越界。
主要就是检查你的发送,接收数据格式。最好都用字符数组
时间: 2024-12-05 08:54:07