提示某个指令引用的内存不能"read",不知道是怎么回事。
SOCKET sock;
sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sock)
{
MessageBox("套接字创建失败");
}
else{
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.S_un.S_addr=inet_addr("202.108.22.142");
int ret;
ret=connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(SOCKET_ERROR==ret){
MessageBox("连接失败");
}
}
const char * request="GET / HTTP/1.1\r\n\r\n";
char buffer[1024]="",httpheader[1024]="";
send(sock, request, strlen(request), 0);
int i=0,j=0;
FILE *fp=fopen("1.txt","a+");
memset(buffer,0,1024);
memset(httpheader,0,1024);
while(recv(sock,buffer,1,0)==1){
if(i<4){
if(buffer[0]=='\r'||buffer[0]=='\n') i++;
else i=0;
memcpy(httpheader+j,buffer,1);j++;
}
else{
fprintf(fp,"%s",buffer[0]);
}
}
fclose(fp);
SOCKET sock;
sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sock)
{
MessageBox("套接字创建失败");
}
else{
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.S_un.S_addr=inet_addr("202.108.22.142");
int ret;
ret=connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(SOCKET_ERROR==ret){
MessageBox("连接失败");
}
}
const char * request="GET / HTTP/1.1\r\n\r\n";
char buffer[1024]="",httpheader[1024]="";
send(sock, request, strlen(request), 0);
int i=0,j=0;
FILE *fp=fopen("1.txt","a+");
memset(buffer,0,1024);
memset(httpheader,0,1024);
while(recv(sock,buffer,1,0)==1){
if(i<4){
if(buffer[0]=='\r'||buffer[0]=='\n') i++;
else i=0;
memcpy(httpheader+j,buffer,1);j++;
}
else{
fprintf(fp,"%s",buffer[0]);
}
}
fclose(fp);
调试,加TRACE,设断点,你先把问题点定位了另外,对方是1个字节1个字节给你发过来的吗?
while((nbytes=read(sockfd,buffer,1))==1)
{
if(i < 4) { /* 获取 HTTP 消息头 */
if(buffer[0] == '\r' || buffer[0] == '\n') i++;
else i = 0;
memcpy(httpheader + j, buffer, 1); j++;
}
else { /* 获取 HTTP 消息体 */
fprintf(localfp, "%c", buffer[0]); /* print content on the screen */
//fprintf(stdout, "%c", buffer[0]); /* print content on the screen */
i++;
}
}
调试,加TRACE,设断点,你先把问题点定位了。
建议你试试把端口号改成4位数吧 你可以试试,而且你SEND之前似乎没有BIND啊
呵呵 我是来学习的,不是来打酱油de!
如果不是的话,我也静待结果。
if(i<4){
if(buffer[0]=='\r'||buffer[0]=='\n') i++;
else i=0;
memcpy(httpheader+j,buffer,1);j++;//问题是在i>=4之前,j可能大于1024,这样httpheader会越界}
else{
fprintf(fp,"%s",buffer[0]);
}