孙鑫 14章 基于TCP的网络应用程序的编写 用VC2012运行,总出现烫烫烫

fuckaway11 2015-12-20 03:39:06
服务端程序
#include <Winsock2.h>
#include <stdio.h>

void main()
{
//加载1.1版本的套接字库
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 addrSrc;
addrSrc.sin_family=AF_INET;
addrSrc.sin_port=htons(7000);
addrSrc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

bind(sockSrv,(SOCKADDR*)&addrSrc,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);//客户端接收数据
printf("%s\n",recvBuf);

closesocket(sockConn);
}
}




#include <Winsock2.h>
#include <stdio.h>
void main()
{
//加载1.1版本的套接字库
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(7000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];

recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is zhangsan",strlen("This is zhangsan")+1,0);

closesocket(sockClient);
WSACleanup();
}





...全文
2719 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
hurryboylqs 2019-09-18
  • 打赏
  • 举报
回复
char recvBuf[100]; int nRecvLen = recv(sockConn,recvBuf,100,0);//客户端接收数据 if(nRecvLen>0) { recvBuf[nRecvLen] = '\0'; printf("%s\n",recvBuf); }
vcf_reader 2019-08-27
  • 打赏
  • 举报
回复
烫烫烫不是真的烫。
检查缓冲区是否足够大?有没有初始化?
Mr.FDD 2019-08-03
  • 打赏
  • 举报
回复
字符串没有以空字符 \0结束造成的:有些地方是程序自动加上空字符,这种情况一定要给出正确的字符串长度值,才能让程序在字符串的末尾加上空字符;有些不是自动加上空字符的,这些地方就需要自己在字符串末尾加上空字符。
还有,当中文字符(双字节)和英文(单字节)的字符混在一起的时候,更容易出现这类错误。解决办法是使用UNICODE字符集,汉字英文通通以双字节存储。不过,同样会出现空字符的上述两种情况,根据情况解决就是了。
  • 打赏
  • 举报
回复
就按照视频一步一步来,我今天刚学 VS2010,妥妥的~没毛病
weixin_44822375 2019-03-23
  • 打赏
  • 举报
回复
chwnin 2019-03-23
  • 打赏
  • 举报
回复
我试过网上其它的要初始化数组、结尾加0这些都不用。
chwnin 2019-03-23
  • 打赏
  • 举报
回复
这个问题我也试了,我用调试服务器端跟踪sendBuf是没有问题的,调试过程中发现客户端是不能用ctrl+F5启动,要先生成exe文件到目录中运行。这时就能出现正确结果了,我用的是VS2015,应该是客户端在CMD中运行造成的错误。
待续_1006 2018-05-02
  • 打赏
  • 举报
回复
多烫几次就好了,关键水还没开。该说的大家都说完了,想不烫,用数组的时候先初始化
赵4老师 2018-04-28
  • 打赏
  • 举报
回复
#27正解!
sichuanwww 2018-04-27
  • 打赏
  • 举报
回复
smwhotjay 2018-04-26
  • 打赏
  • 举报
回复
char sendBuf[100]=""; 数组要初始化为空
shedawei 2018-04-26
  • 打赏
  • 举报
回复
recv前先memset(recvBuf,0,sizeof(recvBuf));
kakabulusi 2017-06-08
  • 打赏
  • 举报
回复
烫烫烫烫烫烫烫烫烫烫 是没有初始化的数据直接发送导致的,发送时将发送空间先置0再写入发送数据,然后再发送
worldy 2017-06-08
  • 打赏
  • 举报
回复
recv(sockConn,recvBuf,100,0);/没有返回数据,是超时返回的
赵4老师 2017-06-08
  • 打赏
  • 举报
回复
windows里常见的内存填充数据含义
 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory
漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers
涵?  * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory
很?  * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger
撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files
烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory
屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory
蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash
 * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory
 * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
Eleven 2017-05-08
  • 打赏
  • 举报
回复
char recvBuf[100] = {0};           recv(sockClient,recvBuf, _countof(recvBuf) - 1,0);类似的地方都修改一下,同时判断recv的返回值,看看接受的数据完整了没?如果没有收完,就循环接收。
  • 打赏
  • 举报
回复
“Welcome %s to http://www.sunxin.org”这句话太长了,改短就不烫了。
  • 打赏
  • 举报
回复
都是从烫烫里面过来的,不虚不虚!、
smartianshan 2017-04-29
  • 打赏
  • 举报
回复
楼主,你的问题最后是怎么解决的?
赵4老师 2016-01-05
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
加载更多回复(20)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧