0207作业

思维导图

服务器

cpp 复制代码
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;
}
相关推荐
forestsea11 分钟前
如何使用 Winget 下载 Claude Code 并实现绿色便携安装
windows·claudecode
海天鹰21 小时前
WIN10修改窗口标题栏失去焦点背景色
windows
llilay1 天前
企业级FastAPI后端模板搭建(六)加密用户密码
windows·fastapi
梦帮科技1 天前
GRAVIS v5.5:向硬核桌面端进化与云端多节点容灾部署实践
windows·架构·rust·自动化·区块链·智能合约·数字货币
tianyazhichiC1 天前
【VLC player 下载地址】
windows
小呀小叮当~1 天前
OpenAI Codex 桌面版(Windows / macOS)体验分享:AI 编程效率再次提升
人工智能·windows·macos
Starry-sky(jing)1 天前
Win11 装 ESP32 Arduino 库卡 3 小时?我把官方 3.3.10 全平台 522MB 搬到了蓝奏云,解压即用
运维·windows·esp32·arduino·离线安装
程序员老油条2 天前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
binbin_522 天前
Flutter 开发鸿蒙实战:Windows 环境下从 HAP 构建到四 Tab 页面运行
windows·flutter·harmonyos
ylscode2 天前
微软推送KB5095189:Windows 11 OOBE开箱即用体验迎来新一轮优化
windows·microsoft