又是一个回射程序!!!!
毕竟还是一只小菜鸟,多练练,多写写没有坏处滴!
这次的回射程序思路如下:
客户端和服务器都使用了新的函数recvvl来接收数据了!!这是一个自己编写的函数,主要作用是接收不定长的数据。
整个程序的设计思路是这样的:
客户端首先将消息体的长度发送给服务器,再将消息体发送给服务器。
在服务器端先接收到消息体的长度,紧接着根据该长度接收相应的数据。
虽然上面接收数据看上去要用两步,但是我们把它放在同一个函数中了!
该函数的实现需要调用前面编写的recvn函数。其实现如下:
int recvvl(SOCKET s, char * recvbuf, unsigned int recvbuflen)
{
int iResult;//存储单次recvn操作的返回值
unsigned int reclen; //用于存储报文头部存储的长度信息
//获取接收报文长度信息
iResult = recvn(s, ( char * )&reclen, sizeof( unsigned int ));
//printf("reclen:%d\n",reclen);
if ( iResult !=sizeof ( unsigned int )) {
//如果长度字段在接收时没有返回一个整型数据就返回(连接关闭)或-1(发生错误)
if ( iResult == -1 ) {
printf("接收发生错误: %d\n", WSAGetLastError());
return -1;
}
else {
printf("连接关闭\n");
return 0;
}
}
//转换网络字节顺序到主机字节顺序
reclen