69,377
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include "winsock2.h"
//#pragma comment(lib, "ws2_32.lib") //2.0版本
int main() {
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR ){
printf("Error at WSAStartup()\n");
}
// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return 1;
}
// Connect to a server.
struct sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("113.106.90.157");
clientService.sin_port = htons( 80 );
if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(SOCKADDR)) == SOCKET_ERROR){
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
// Send and receive data.
int bytesSent;
char sendbuf[1024];
sprintf(sendbuf,"%s","GET / HTTP/1.1\r\n");
strcat(sendbuf,"Host: www.chachaoo.com\r\n");
strcat(sendbuf,"Content-Encoding: utf-8\r\n");
strcat(sendbuf,"User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0\r\n\r\n");
int bytesRecv = strlen(sendbuf);
char recvbuf[1024];
char *precvbuf = recvbuf;
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );
// bytesRecv = recv( m_socket, recvbuf, 2 , 0 );
// printf("\n %d\n",bytesRecv);
while( 1 ) {
bytesRecv = recv(m_socket, recvbuf,1024 , 0);
printf("%s",recvbuf);
// printf("\n%d\n",bytesRecv);
if(bytesRecv<=0){
break;
}
}
close(m_socket);
return 0;
}
char sendbuf[1024];
bytesRecv = recv(m_socket, recvbuf,1023 , 0);
if (bytesRecv <= 0)
break;
recvbuf[bytesRecv] = '\0';
printf("%s",recvbuf);
[/quote]
还是错,收1023时候,1023字节被你0覆盖了,参照我#1吧。char sendbuf[1024];
bytesRecv = recv(m_socket, recvbuf,1023 , 0);
if (bytesRecv <= 0)
break;
recvbuf[bytesRecv] = '\0';
printf("%s",recvbuf);
while( 1 ) {
//bytesRecv = recv(m_socket, recvbuf,1024 , 0);
//printf("%s",recvbuf);
// printf("\n%d\n",bytesRecv);
// if(bytesRecv<=0){
// break;
// }
bytesRecv = recv(m_socket, recvbuf,1024 , 0);
if (bytesRecv <= 0) break;
// recvbuf[bytesRecv+1] = 0;
// printf("%s",recvbuf);
HexDump(recvbuf,bytesRecv);
}
char sendbuf[1024];
bytesRecv = recv(m_socket, recvbuf,1023 , 0);
if (bytesRecv <= 0)
break;
recvbuf[bytesRecv] = '\0';
printf("%s",recvbuf);
[/quote]
还是错,收1023时候,1023字节被你0覆盖了,参照我#1吧。[/quote]
你那1楼的代码 才是不对的
recvbuf[bytesRecv+1] = 0;
这个+1是不需要的 收10个字节 那就是recvbuf[10] = 0;
应该是[/quote]
你是对的,楼主在我1楼代码上把recvbuf[bytesRecv+1]=0修改为recvbuf[bytesRecv]=0吧,当时想着收到后的末尾+1的字节给终止符,忽略了数组从0开始。char sendbuf[1024];
bytesRecv = recv(m_socket, recvbuf,1023 , 0);
if (bytesRecv <= 0)
break;
recvbuf[bytesRecv] = '\0';
printf("%s",recvbuf);
[/quote]
还是错,收1023时候,1023字节被你0覆盖了,参照我#1吧。[/quote]
你那1楼的代码 才是不对的
recvbuf[bytesRecv+1] = 0;
这个+1是不需要的 收10个字节 那就是recvbuf[10] = 0;
应该是