当前位置: 首页 > article >正文

0207作业

思维导图

 

 服务器

enum Type{
	TYPE_REGIST,
	TYPE_LOGIN
};

typedef struct Pack{
	int size;
	enum Type type;
	char buf[2048];

}pack_t;

typedef struct list{
    union Data{
        struct List* tail;
        char str[64];
    }data;
    struct List* next;
    struct List* prev;
}List;

List* create_node(){
    List* H=malloc(sizeof(List));
    H->next=NULL;
    H->prev=NULL;
    H->data.tail=H;
    return H;
}

void insert(List* head,List* p){
    head->data.tail->next=p;
    p->next=head;
    p->prev=head->data.tail;
    p->data.tail=p;
}

void read_pack(pack_t* pack){
 	List* head=create_node();
    int readed_size = 0;
    while(1)
    {
        short data_size = *(short*)(pack->buf+readed_size);
        if(data_size == 0)
        {
            printf("数据解析完毕\n");
            break;
        }
        readed_size += 2;
        List* p=calloc(1,sizeof(List));
        memcpy(p->data.str,pack->buf+readed_size,data_size);
        readed_size +=data_size;
        insert(head,p);
    }	
}

int main(int argc, const char *argv[])
{
	int server=socket(AF_INET,SOCK_STREAM,0);
	struct sockaddr_in addr ={0};
	addr.sin_family=AF_INET;
	addr.sin_port=htons(8888);
	addr.sin_addr.s_addr=inet_addr("0.0.0.0");

	if(bind(server,(addr_t*)&addr,sizeof(addr))==-1){
		perror("bind");
		return 1;
	}

	listen(server,10);
 
	addr_in_t client_addr={0};
	int client_addr_len=sizeof(client_addr);
	int client=accept(server,(struct sockaddr*)&client_addr,&client_addr_len);
	
	while(1){
		pack_t pack={0};
		int pack_size=0;
		read(client,&pack_size,4);
		read(client,(char*)&pack+4,pack_size-4);
		pack.size=pack_size;
		read_pack(&pack);
	}
	return 0;
}


http://www.kler.cn/a/538670.html

相关文章:

  • 非递减子序列(力扣491)
  • 【键盘识别】实例分割
  • 【Git】tortoisegit使用配置
  • 单例模式几种实现
  • 鸿蒙 router.back()返回不到上个页面
  • 【AIGC】冷启动数据与多阶段训练在 DeepSeek 中的作用
  • DeepSeek 和 ChatGPT 的商业化发展前景对比
  • 深入浅出谈VR(虚拟现实、VR镜头)
  • 1、http介绍
  • 深入探究 C++17 std::is_invocable
  • LeetCode--300. 最长递增子序列【DP+二分】
  • 自动化测试工具selenium的安装踩坑
  • android隐藏虚拟按键recents button
  • Android的MQTT客户端实现
  • Qt实现简易视频播放器
  • Spring Boot 自动装配原理与优化实践
  • 算法与数据结构(合并K个升序链表)
  • C#面试常考随笔14: 方法如何传递不定数量的参数?params关键字怎么使用?
  • kafak最新安装教程【kafka_2.13-3.9.0】双语版
  • 电商行业的新篇章:3D和AR技术助力销售转化率提升!
  • 基于html和vue.js以及其他编程技术打造一个仿京东购物网站平台
  • c++学习笔记——c++基础
  • 【DeepSeek】DeepSeek概述 | 本地部署deepseek
  • Day81:数据的保存
  • Thinkpad T480s/X1c 2018 Manjaro Sway(ArchLinux)安装指纹(ID 06cb:009a)
  • 【C语言标准库函数】三角函数