4.4.6 接收数据
来源:互联网 发布:广州淘宝商家 编辑:程序博客网 时间:2024/05/22 00:18
recvLine()函数实现接收一行数据的功能。在该函数中定义bLineEnd变量作为一行结束的标志。该变量和bConning变量一起作为While语句循环的条件。
将recv()函数的第3个参数设置为1,使得该函数每次仅接收一个字符。通过判断接收的字符是否为'/n',来判断是否已经接收了一行数据。当接收字符为'/n'时,将bLineEnd设置为True。While语句循环结束,该函数返回True。
调用recv()函数失败时,调用break语句跳出while循环体,recvLine()函数返回值False。以该函数的返回值,判断是否成功地从客户端接收了一行数据。
当recv()函数返回值为0时,说明此时客户端的关闭了连接。
recvLine()函数程序清单如下。
/*
* 读一行数据
*/
BOOL RecvLine(SOCKET s, char* buf)
{
BOOL retVal = TRUE; //返回值
BOOL bLineEnd = FALSE; //行结束
int nReadLen = 0; //读入字节数
int nDataLen = 0; //数据长度
while (!bLineEnd && bConning) //与客户端连接 没有换行
{
nReadLen = recv(s, buf + nDataLen, 1, 0);//每次接收一个字节
//错误处理
if (SOCKET_ERROR == nReadLen)
{
int nErrCode = WSAGetLastError();//错误代码
if (WSAENOTCONN == nErrCode)
{
ShowSocketMsg("The socket is not connected!");
}else if(WSAESHUTDOWN == nErrCode)
{
ShowSocketMsg("The socket has been shut down!");
}else if (WSAETIMEDOUT == nErrCode)
{
ShowSocketMsg("The connection has been dropped!");
}else if (WSAECONNRESET == nErrCode)
{
ShowSocketMsg("The virtual circuit was reset by the remote side!");
}else{}
retVal = FALSE; //读数据失败
break; //跳出循环
}
if (0 == nReadLen) //客户端关闭
{
retVal = FALSE; //读数据失败
break ; //跳出循环
}
//读入数据
if ('/n' == *(buf + nDataLen)) //换行符
{
bLineEnd = TRUE; //接收数据结束
}else{
nDataLen += nReadLen; //增加数据长度
}
}
return retVal;
}
注意:在调用Windows Sockets API时,如果调用函数失败,大多数函数返回SOCKET_ERROR。调用者可以使用WSAGetLastError()函数,获得错误代码。WSAGetLastError()函数得到最近一次操作失败时的错误代码。在下面的示例代码中,WSAGetLastError()函数使用是不正确的。
int retVal = listen(sServer, 2);
if(SOCKET_ERROR == retVal)
{
closesocket(sServer);
int nErrCode = WSAGetLastError();
if (WSAENETDOWN == nErrCode) //错误处理
{
//处理
}
}
- 4.4.6 接收数据
- LoRa开发6:接收数据帧
- 4.3.3 接收数据
- 4.5.3 接收数据
- 4.6.5 接收数据
- Mscomm接收数据问题
- 控制台接收数据
- 串口接收数据c#
- FIFO接收数据
- 利用SerialPort接收数据
- map接收数据
- flex接收XML数据
- udp发送接收数据
- 串口接收数据c#
- 接收数据 recv
- 接收数据recvfrom
- 串口数据接收小结
- c# USB数据接收
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(23):spinlock.h
- 无题
- 放松心情的好FLASH,闲情逸致“喂鱼”
- 分享论坛建设的心得与宣传方案
- 4.4.5 接受请求
- 4.4.6 接收数据
- 使用存储过程的好处
- 囧,现在才只QQ有远程控制
- 开博之前
- 从struts 1.x升级到 struts 2(一) 第一个程序
- 什么是触发器
- 重返博客
- WORD中经常遇到的一个图片插入问题
- XML语法概述