惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
博客园_首页
量子位
博客园 - 司徒正美
S
SegmentFault 最新的问题
J
Java Code Geeks
小众软件
小众软件
博客园 - 【当耐特】
The Register - Security
The Register - Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
博客园 - Franky
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
G
GRAHAM CLULEY
Cyberwarzone
Cyberwarzone
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
F
Full Disclosure
D
DataBreaches.Net
Martin Fowler
Martin Fowler
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 最新话题
云风的 BLOG
云风的 BLOG
C
Check Point Blog
T
Threatpost
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
W
WeLiveSecurity
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
Last Week in AI
Last Week in AI
T
Tor Project blog
T
Troy Hunt's Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security Affairs
SecWiki News
SecWiki News

十二的编程笔记

26 年新年前 vibe coding 感慨 - 随便写写 社区驱动型流量的转化效能与质量特征分析 - AI - 计算机科学 ClawdBot 祛魅 2 小时安装 + 实际体验 还需再练练 - AI - 计算机科学 golang 标准库源码解析 - runtime2 GMP - Lib - GO - 计算机科学 BCTF2025-AI - BCTF2025 - CTF - 计算机科学 BCTF2025-MISC-01~08 - BCTF2025 - CTF - 计算机科学 golang 标准库源码解析 - channel - Lib - GO - 计算机科学 golang 标准库源码解析 - Context - Lib - GO - 计算机科学 golang 多版本环境控制 - GO - 计算机科学 cloudflare connect 踩坑记录 - Project - 计算机科学 BCTF2024-WEB-01~08 - BCTF2024 - CTF - 计算机科学 BCTF2024-MISC - BCTF2024 - CTF - 计算机科学 Hexo 使用 github Action 进行发布 - Project - 计算机科学 BCTF2024-REVERSE - BCTF2024 - CTF - 计算机科学 分布式事务 - 高可用 - 计算机科学 分布式 CAP 和 BASE 理论 简介 - 高可用 - 计算机科学 搭建使用 Cloudflare Worker 的 Docker 镜像 - Project - 计算机科学 GitHub Copilot 封号及退款过程 - Project - 计算机科学 记录一次 innodb 全表 update - MySQL - Database - 计算机科学
BCTF2024-IOT - BCTF2024 - CTF - 计算机科学
本文作者: Twelveeee @十二的编程笔记 · 2024-09-27 · via 十二的编程笔记
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define MAGIC 0xdeadbeef
#define FLAG_FILE "flag"
#define PORT 8888
void get_flag(int client_sock) {
    FILE *file = fopen(FLAG_FILE, "r");
    if (file == NULL) {
        perror("fopen");
        return;
    }
    char flag[128];
    if (fgets(flag, sizeof(flag), file) == NULL) {
        perror("fgets");
        fclose(file);
        return;
    }
    fclose(file);
    send(client_sock, flag, strlen(flag), 0);
    
    close(client_sock);
}
void handle_client(int client_sock) {
    char buffer[64];
    unsigned int magic;
    unsigned int size;
    printf("client_sock: %d\n", client_sock);
    
    if (recv(client_sock, &magic, sizeof(magic), 0) <= 0) {
        perror("recv");
        close(client_sock);
        return;
    }
    
    if (magic != MAGIC) {
        printf("Invalid magic number\n");
        close(client_sock);
        return;
    }
    
    if (recv(client_sock, &size, 4, 0) <= 0) {
        perror("recv");
        close(client_sock);
        return;
    }
    
    if (recv(client_sock, buffer, size, 0) <= 0) {
        perror("recv");
        close(client_sock);
        return;
    }
    
    printf("Received content: %s\n", buffer);
}
 * @description
 * 实现一个服务器程序,使用 TCP 协议监听指定的端口,并处理来自客户端的连接请求。
 * 服务器会打印出 "Server listening on port XXXX",其中 XXXX 是端口号,然后进入死循环等待客户端的连接。
 * 当有新的客户端连接时,服务器会调用 handle_client 函数处理该连接。
 * 如果发生错误,则输出相应的错误信息并退出程序。
 *
 * @param {boolean} isClientConnected
 * 表示是否已经连接到了客户端,默认为 false。
 *
 * @returns {number}
 * 返回一个整数,表示服务器监听的端口号。
 */
int main() {
    int server_sock, client_sock;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    
    server_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (server_sock < 0) {
        perror("socket");
        exit(EXIT_FAILURE);
    }
    
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);
    if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind");
        close(server_sock);
        exit(EXIT_FAILURE);
    }
    
    if (listen(server_sock, 5) < 0) {
        perror("listen");
        close(server_sock);
        exit(EXIT_FAILURE);
    }
    printf("Server listening on port %d\n", PORT);
    
    while ((client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_addr_len)) >= 0) {
        handle_client(client_sock);
    }
    close(server_sock);
    return 0;
}