Socket类的Send和Receive函数

laserman 2003-08-18 05:40:51
Receive的返回值表示收到的字节数,那么当它返回0的时候表示什么意思?
如果表示收到了长度为0的信息(无内容),那么,为什么我用Send函数发送0字节信息的时候总是收不到?
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
calmzeal 2003-08-19
  • 打赏
  • 举报
回复
up
laserman 2003-08-19
  • 打赏
  • 举报
回复
to snof(雪狼):
谢谢,原来服务器端Shutdown,这样收到的字节数就是0,原来没用过这个函数,所以在机器上模拟不出来。
apower511 2003-08-19
  • 打赏
  • 举报
回复
友情赠送一段代码:
SOCKET sckClient = INVALID_SOCKET;
SOCKET sckServer = INVALID_SOCKET;
char *chData = new char[MAX_DATA + 1];
while(1)
{
sckServer = socket(AF_INET, SOCK_STREAM, 0);
if(sckServer == INVALID_SOCKET)
{
Sleep(500);
continue ;
}
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT_SERVER);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sckServer, (sockaddr*)&addr, sizeof(addr))
listen(sckServer, SOMAXCONN)
int naddrlen = sizeof(addr);
sckClient = accept(sckServer, (sockaddr *)&addr, &naddrlen);
while(1) // 处理从客户端收到的数据
{
memset(chData, 0, MAX_DATA + 1);
int nLen = recv(sckClient, chData, MAX_DATA, 0);
if(nLen > 0)
{
if(S_CLOSESERVER == chData[0])
goto CLOSESERVER;
//这里可以添加你要怎么处理受到的数据,例如显示:
chData[0] = S_TEMP;
send(sckClient, chData, 1, 0);
continue ;
}
break ;//出错了,则重新创建服务器端
}
DF_CloseSocket(sckClient);
DF_CloseSocket(sckServer);


CLOSESERVER ://关闭套接字
if(chData != NULL)
{
delete []chData;
}

closesocket(sckClient);
closesocket(sckServer);


apower511 2003-08-19
  • 打赏
  • 举报
回复
发送0字节信息干什么?
一般是在一个while(1)里面看Receive的返回值,当>0说明收到信息,
你就可以处理受到的信息了~
雪狼1234567 2003-08-18
  • 打赏
  • 举报
回复
看一下这篇文章及源码,讲得太详细啦:
http://www.c-sharpcorner.com/Network/NetworkProgramPart2RVS.asp

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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