专栏首页陶士涵的菜地[linux] C语言Linux系统编程-socket开发响应HTTP协议

[linux] C语言Linux系统编程-socket开发响应HTTP协议

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
        //创建套接字
        int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        //将套接字和IP、端口绑定
        struct sockaddr_in serv_addr;
        memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
        serv_addr.sin_family = AF_INET;  //使用IPv4地址
        serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //具体的IP地址
        serv_addr.sin_port = htons(1234);  //端口
        bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
        //进入监听状态,等待用户发起请求
        listen(serv_sock, 20);
        while(1){
                //接收客户端请求
                struct sockaddr_in clnt_addr;
                socklen_t clnt_addr_size = sizeof(clnt_addr);
                int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);

                FILE *cin = fdopen(clnt_sock, "r");
                setbuf(cin, (char *) 0);
                char buf[1024];
                fgets(buf, 1024, cin); //读取第一行
                printf("\n%s", buf);
                char *html="Hello Taoshihan ";
                char *result = malloc(strlen(html) + strlen(buf) + 1);
                strcpy(result, html);
                strcat(result, buf);
                                                                                                    34,7-17       Top
                //接收客户端请求
                struct sockaddr_in clnt_addr;
                socklen_t clnt_addr_size = sizeof(clnt_addr);
                int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);

                FILE *cin = fdopen(clnt_sock, "r");
                setbuf(cin, (char *) 0);
                char buf[1024];
                fgets(buf, 1024, cin); //读取第一行
                printf("\n%s", buf);
                char *html="Hello Taoshihan ";
                char *result = malloc(strlen(html) + strlen(buf) + 1);
                strcpy(result, html);
                strcat(result, buf);

                //char *result=str_join(html,buf);
                char res[1024];
                char str[] = "HTTP/1.1 200 OK\r\nServer: Tao\r\nContent-Type: text/html; charset=utf-8\r\nContent-Leng
th: %d\r\n\r\n%s";
                sprintf(res,str,strlen(result),result);
                printf("%s\n",res);
                write(clnt_sock, res, sizeof(res));
                //关闭套接字
                close(clnt_sock);
        }
        close(serv_sock);
        return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [linux] C语言Linux系统编程-socket开发

    4.将内存中字节的编号称为地址(Address)或指针(Pointer),一般认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地...

    陶士涵
  • [linux] C语言Linux系统编程-socket回声客户端

    1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。

    陶士涵
  • [linux] C语言Linux系统编程-TCP通信的11种状态

    三次握手 由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手) 当server收到之后会由LISTEN转变为SYN_REV...

    陶士涵
  • [linux] C语言Linux系统编程-socket回声客户端

    1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。

    陶士涵
  • 2个小bug,有点小门道

    温安适
  • 2个小bug,有点小门道

    2017年的某日,小辉(我的同事)遇到了一个bug,解决了一下午还是没有找到,气的摔键盘,骂人,我看在眼里,急在心中。

    温安适
  • Java单体应用 - 项目实战(后台) - 01.后台登录

    原文地址:http://www.work100.net/training/monolithic-project-iot-cloud-admin-login.ht...

    光束云
  • Direct3D学习(一):3D Sierpinski镂垫绘制

    逍遥剑客
  • hive、sqoop、MySQL间的数据传递

    stored as 关键词,hive目前支持三种方式: 1:就是最普通的textfile,数据不做压缩,磁盘开销大,解析开销也大 2:SquenceFIle,h...

    互联网金融打杂
  • 用分布式技术轻松化解数据库容量和性能瓶颈

    我们的目标是您的业务仅需要 2 个数据库就够了,一个用来部署正式业务,不增加存储成本基础上,能涵盖 OLTP&OLAP 场景,且可以覆盖多种数据类型;另一个,一...

    腾讯云数据库团队

扫码关注云+社区

领取腾讯云代金券