嵌入式学习day38

http天气项目总结:

http用户层协议

从网上获得了天气数据

客户端程序:
        socket

        connect:组织了http请求报文并发送

        回复响应报文 + 数据

        对数据做解析

协议:
        每一次的通信的规则

connection:keep-alive //长连接

特点:

  1. tcp通信建立连接

connection:close //短连接

特点:

  1. 每次通信,都需要重新建立连接

半包问题

做处理:

  1. connect server
  2. request_http_future
  3. recv http response
  4. parse_data
  5. close

细节:
        解析数据时 --- 段错误

        gcc main.c -g

        gdb ./a.out

        r //运行

        如果函数返回值是指针类型,要做错误判断

        if (p == NULL)


并发服务器

同时处理多个客户端

多进程实现并发:

#include "head.h"


void do_child(int signo)
{
    wait(NULL);
}
int main(int argc, char const *argv[])
{
	//step1 socket 
	int fd = socket(AF_INET,SOCK_STREAM,0);

	if (fd < 0)
	{
		perror("socket fail");
		return -1;
	}

	struct sockaddr_in seraddr;
	bzero(&seraddr,sizeof(seraddr));
	seraddr.sin_family = AF_INET;
	seraddr.sin_port = htons(50000);
	seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    int on = 1;
    setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int));

	//step2 bind 
	if (bind(fd,(const struct sockaddr *)&seraddr,sizeof(seraddr)) < 0)
	{
		perror("connect fail");
		return -1;
	}
	//step3 listen
	if (listen(fd,5) < 0)
	{
		perror("listen fail");
		return -1;
	}
	struct sockaddr_in cliaddr;
	bzero(&cliaddr,0);
	socklen_t len = sizeof(cliaddr);
	
    //step4 accept

    signal(SIGCHLD,do_child);
	while (1)
    {
        int connfd = accept(fd,(struct sockaddr *)&cliaddr,&len);
        if (connfd < 0)
        {
            perror("accept fail");
            re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值