客户端A 想服务器B 发送一个 TCP 封装的HTTP报文 PACK1,抓包工具抓到服务器返回的TCP封装的HTTP报文Pack2。但是客户端的RECV却一直阻塞。表示没有数据到达。请教可能是什么原因?
下面是客户端的代码:#include "stdio.h"
#include <winsock2.h>#include <ws2tcpip.h> #include <tpipv6.h>
void main()
{
ADDRINFO hints, * saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
char hostname[1000] ;
strcpy(hostname,"GET /announce?....省略");
printf( "%s ",hostname);
char dest[10];
if(WSAStartup(winsock_version,&wsadata))
printf( "can 't open ");memset(&hints,0,sizeof(hints));
hints.ai_family=PF_INET6;
hints.ai_socktype=SOCK_STREAM;
//hints.ai_protocol=IPPROTO_TCP;
int rc=getaddrinfo("服务器IPV6地址","6969",&hints,&saServer);
if(rc==WSANO_DATA)
return;
hsocket = socket(saServer->ai_family, saServer->ai_socktype,saServer->ai_protocol);
if(hsocket==INVALID_SOCKET)
printf("Create socket failed!\n");
nRet = connect(hsocket, saServer->ai_addr,saServer->ai_addrlen);if (nRet == SOCKET_ERROR)
{
printf( "can 't connect ");
closesocket(hsocket);
return;
}
else
printf( "connected with ");
nRet = send(hsocket, hostname, strlen(hostname), 0);
if (nRet == SOCKET_ERROR)
{
printf( "send() failed ");
closesocket(hsocket);}
else
printf( "send() OK\n ");
nRet=1;
while(nRet> 0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);//阻塞
if(nRet> 0)
dest[nRet]=0;
else
dest[0]=0;
printf( "\nReceived bytes:%d\n ",nRet);
printf( "Result:\n%s ",dest);
}}
下面是客户端的代码:#include "stdio.h"
#include <winsock2.h>#include <ws2tcpip.h> #include <tpipv6.h>
void main()
{
ADDRINFO hints, * saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
char hostname[1000] ;
strcpy(hostname,"GET /announce?....省略");
printf( "%s ",hostname);
char dest[10];
if(WSAStartup(winsock_version,&wsadata))
printf( "can 't open ");memset(&hints,0,sizeof(hints));
hints.ai_family=PF_INET6;
hints.ai_socktype=SOCK_STREAM;
//hints.ai_protocol=IPPROTO_TCP;
int rc=getaddrinfo("服务器IPV6地址","6969",&hints,&saServer);
if(rc==WSANO_DATA)
return;
hsocket = socket(saServer->ai_family, saServer->ai_socktype,saServer->ai_protocol);
if(hsocket==INVALID_SOCKET)
printf("Create socket failed!\n");
nRet = connect(hsocket, saServer->ai_addr,saServer->ai_addrlen);if (nRet == SOCKET_ERROR)
{
printf( "can 't connect ");
closesocket(hsocket);
return;
}
else
printf( "connected with ");
nRet = send(hsocket, hostname, strlen(hostname), 0);
if (nRet == SOCKET_ERROR)
{
printf( "send() failed ");
closesocket(hsocket);}
else
printf( "send() OK\n ");
nRet=1;
while(nRet> 0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);//阻塞
if(nRet> 0)
dest[nRet]=0;
else
dest[0]=0;
printf( "\nReceived bytes:%d\n ",nRet);
printf( "Result:\n%s ",dest);
}}
有时候recv只能够收到部分数据包,抓包工具抓到的其他一些返回的数据包还是收不到