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;
}
相关推荐
Tee xm1 小时前
清晰易懂的Cursor实现AI编程从安装到实战TodoList开发
windows·ai编程
Tee xm2 小时前
清晰易懂的Trae实现为AI编程从安装到实战开发ToDoList
windows·macos·ai编程
xccoding2 小时前
【FW】ADB指令分类速查清单
数据库·windows·adb
钢铁男儿3 小时前
Python 序列构成的数组(列表推导和生成器表达式)
开发语言·windows·python
.m4 小时前
惠普HP LJ4301 4303打印机信息
windows
爱的叹息5 小时前
一个完整的 Spring Batch + RepositoryItemWriter + CrudRepository 示例,包含详细注释说明
windows·spring·batch
鹿九丸13 小时前
STL之list
服务器·c语言·c++·windows·list
whatever who cares15 小时前
java.util包之java.util.Collection介绍
java·服务器·windows
Eclips316 小时前
vmware虚拟机突然连不上网
windows
会飞的土拨鼠呀17 小时前
Windows系统添加路由
windows