Linux开发——http服务器开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_25490573/article/details/102690165

http协议解析

URL资源定位符 构成: 协议://域名/url路径      

响应

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define SERVER_HOST "192.168.10.110"
#define SERVER_POST 6666
#define BUFFER_SIZE 4096

int main(int argc, char const *argv[])
{
	
	int cfd,h,i;
	int recbyte;
	int sin_size;
	char * buffer;
	char * data = "qqCode=1443965173";
	char * datalen;
	struct sockaddr_in s_add;
	fd_set  set;
	struct timeval  tv;

	printf("Hello,welcome to client!\r\n");
 
	
 
	cfd = socket(AF_INET, SOCK_STREAM, 0);
	if(-1 == cfd)
	{
			printf("socket fail ! \r\n");
			return -1;
	}
	buffer = (char *)malloc(BUFFER_SIZE);
	datalen = (char *)malloc(128);
	memset(buffer,'\0',BUFFER_SIZE);
	bzero(&s_add,sizeof(struct sockaddr_in));

	int len = sizeof(data);
	sprintf(datalen,"%d",len);
	strcat(buffer,"POST /web/index HTTP/1.1\r\n");
	strcat(buffer,"Host: 127.0.0.1:1111\r\n");
	strcat(buffer,"Content-Type: application/w-www-for-urlencoded\r\n");
	strcat(buffer,"Content-Length: ");
	strcat(buffer,datalen);
	strcat(buffer,"\r\n\r\n");
	strcat(buffer,data);
	strcat(buffer,"\r\n\r\n");
	printf("%s\n",buffer);

	s_add.sin_family=AF_INET;
	s_add.sin_addr.s_addr= inet_addr(SERVER_HOST);
	s_add.sin_port=htons(SERVER_POST);
	if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
	{
			printf("connect fail !\r\n");
			return -1;
	}
	if(write(cfd,buffer,strlen(buffer))==-1)
	{
		printf("send failed!!\n");
		return -1;
	}

    FD_ZERO(&set);
    FD_SET(cfd, &set);

    while(1)
    {
        sleep(1);
    	tv.tv_sec = 1;
    	tv.tv_usec = 0;
    	//h= select(cfd +1, &set, NULL, NULL, &tv); 
	h=1;    
	if(h<0){
    		printf("error\n");
    		break;
    	}else if(h==0){
    		printf("chaoshi \n");
    	}else if(h>0){
    		memset(buffer, 0, 4096);
            i= read(cfd, buffer, 4095);
            if (i<=0){
            close(cfd);
            printf("读取数据报文时发现远端关闭,该线程终止!\n");
            return -1;
            }else{
            	printf("%s\n", buffer);
            }
    	}
    }
    close(cfd);
	return 0;
}

首部行

猜你喜欢

转载自blog.csdn.net/qq_25490573/article/details/102690165
今日推荐