生活 + 筆記

5.03.2009

Win32 Socket

from : http://nsysumis94.pixnet.net/blog/post/8782796

原本想說寫個http client好了,上Google找了一下,看到蠻多unix下面的sample code就是沒看到windows的,所以拿了之前的程式來改一改,說到這邊不能不推一下ethereal,Sniffer真是撰寫Socket程式的好 幫手阿,廢話不多說,下面是Source Code,使用Dev C++ 4.9.9.2編譯,編譯時需要在"工具->編譯器選項->當呼叫編譯器時加入下面命令"的地方加上一個"-lws2_32"參數:

#include
#include

int main (int argc, char *argv[]) {
SOCKET sockfd;
WSADATA wsaData;
#define bufsize 300
struct hostent *host;
struct sockaddr_in dest_addr;
char *Rec_Buf = (char*) malloc(bufsize+1);
char request[1000];
int rec;

if(argc!=3){
printf("\nUsage:%s [Server IP/DN] [webpage]\n\n",argv[0]);
printf("For example:\n%s 127.0.0.1 index.html\n",argv[0]);
exit(1);
}
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
WSACleanup();
return -1;
}
if ( (host=gethostbyname(argv[1])) == NULL) {
perror("gethostbyname");
exit(1);
}
memset(&dest_addr,0,sizeof(dest_addr));
memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);

dest_addr.sin_family= host->h_addrtype;
dest_addr.sin_port= htons(80);


if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < rec="recv(sockfd,Rec_Buf,bufsize,0);"> 0){
printf("%s",Rec_Buf);
}
}
while(rec > 0);
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
#else
close(sockfd);
#endif
}

沒有留言:

張貼留言