Socket tcp/ip 例子 C语言 LINUX

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h>

int getHttpInfo(char *IP,int port,char *spage,char *para,char *stype,char *retbufw) {   char stringfile[256];    char retbuf[1024*4];  memset(retbuf,0,sizeof(retbuf));  int numbytes;  char buf[256],*p,*ss="\r\n\r\n",*pp,*sss="404";  memset(buf,0,sizeof(buf));  struct hostent *hptr;  hptr =NULL;  struct sockaddr_in their_addr;  memset(&their_addr,0,sizeof(struct sockaddr_in));  int i = 0;      hptr = gethostbyname(IP);  int tcp_sock;  if((tcp_sock = socket(AF_INET,SOCK_STREAM,0))==-1)  {   close(tcp_sock);   return 2;  }  their_addr.sin_family = AF_INET;  their_addr.sin_port = htons(port);  their_addr.sin_addr.s_addr  =inet_addr(IP);  bzero(&(their_addr.sin_zero),8);  if(connect(tcp_sock,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)  {   close(tcp_sock);   return 0;  }  char request[512];  memset(request,0,sizeof(request));  if(strcmp(stype,"GET")==0)  {   sprintf(request, "%s /%s?%s HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\nHost: %s:%d\r\nConnection: Close\r\n\r\n",stype,spage,para,IP,port );

 }  else  {      sprintf(request, "%s /%s HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\nHost: %s:%d\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length:%d\r\nConnection:Keep-Alive\r\n\r\n%s\r\n\r\n",stype,spage,IP,port ,strlen(para),para);  }  if(send(tcp_sock,request,strlen(request),0)==-1)  {   close(tcp_sock);   return 0;  }      memset(retbuf,0,sizeof(retbuf));  numbytes = 1;  while(numbytes >0)  {   memset(buf,0,sizeof(buf));   numbytes = recv(tcp_sock,buf,255,0) ;   if(numbytes > 0)   {     strcat(retbuf , buf);      pp=strstr(retbuf,sss);     if(pp !=NULL)     {      return 2;     }       }   else   {    break;   }

  if(numbytes < 255 )   {    break;   }     }  close(tcp_sock);  explore(retbuf,"\r\n\r\n",2,retbufw);  return 1; }

 


 

int explore(char *ch,char *cc,int size,char *rebuf) {  char iChar ,tmp[256];   int len = strlen(ch);   int i,j,x;  x = 0;   memset(tmp,0,sizeof(tmp));    for(i=0,j=0;i<len;i++)  {   iChar = ch[i];   if( memcmp(ch+i,cc,strlen(cc))==0 )   {    x++;    if(x == size)    {     strcpy(rebuf, tmp);    }    memset(tmp,0,sizeof(tmp));    j = 0;    i=i+strlen(cc)-1;   }   else   {    tmp[j] = iChar;    j++;   }     }  x++;  if(x == size)  {   strcpy(rebuf, tmp);  }  return x; }


 

int main()
{
    char ip[] = "192.168.4.16";
    int port  = 80;
    char spage[] = "web.php";
    char para[] = "action=upload&name=范志刚&age=26";
    char stype[] = "POST";
    char retbufw[1024*4];
    memset(retbufw,0,sizeof(retbufw));
    int i,y; 
    printf("begin\n");
  y = getHttpInfo(ip,port,spage,para,stype,retbufw);
  if( y == 1)
  {
    printf("read : \n");
      printf ("%s",retbufw); 
      printf (" ");
  }
  if(y == 2)
  {
      printf ("------no find"); 
      printf (" ");
  }
  if(y == 0)
  {
      printf ("--->time out"); 
      printf (" ");
  }
    printf("end\n");
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值