http天气项目总结:
http用户层协议
从网上获得了天气数据
客户端程序:
socket
connect:组织了http请求报文并发送
回复响应报文 + 数据
对数据做解析
协议:
每一次的通信的规则
connection:keep-alive //长连接
特点:
- tcp通信建立连接
connection:close //短连接
特点:
- 每次通信,都需要重新建立连接
半包问题
做处理:
- connect server
- request_http_future
- recv http response
- parse_data
- 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

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



