3 TCP搭建 服务器 客户端

最简单的 服务器 客户端

server.c 
int main(int argc, char const *argv[])
{
    int server=socket(AF_INET,SOCK_STREAM,0);

    addr_in_t addr={0};
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8888);
    addr.sin_addr.s_addr=inet_addr("0.0.0.0");

    bind(server,(addr_t*)&addr,sizeof(addr));
    liseten(server,10);

    addr_in_t c_add={0};
    int c_add_len=sizeof(c_add);
    int client=accept(server,(addr_t*)&c_add,&c_add_len);

    while(1){
        char buf[64];
        int res=read(client,buf,64);
        if(res==0){
            printf("du kai\n");
            return 0;
        }
        printf("news:%s\n",buf);
    }
    return 0;
}
client.c 
int main(int argc, char const *argv[])
{
    int client=socket(AF_INET,SOCK_STREAM,0);

    addr_in_t addr={0};
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8888);
    addr.sin_addr.s_addr=inet_addr("192.168.126.189");

    connect(client,(addr_t*)&addr,sizeof(addr));

    while(1){
        char buf[64];
        printf("shuru:\n");
        scanf("%63s",buf);
        while(getchar()!=10);
        write(client,buf,64);
    }
    return 0;
}

动态协议包    实现的服务器 客户端

server.c 
enum Type{
    TYPE_REGIST,
    TYPE_LOGIN
}
typedef struct Pack{
    int size ;
    enum Type type;
    char buf[2048];
    int count;
}pack_t;

void read_pack(pack_t *pack){
    char*buf=pack->buf;
    int read_size=0;
    whlie(1){
        short data_size=*(short*)(buf+read_size);
        if(data_size==0){
            printf("jie xi wan bi\n");
            break;
        }
        read_size+=2;
        char data[data_size+1];
        memcpy(data,buf+read_size,data_size);
        read_size+=data_size;
        printf("data=\n",data);
    }
}

int main(int argc, char const *argv[]){
    int server=socket(AF_INET,SOCK_STREAM,0);
    addr_in_t addr={0};
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8888);
    addr.sin_addr.s_addr=inet_addr("0.0.0.0");
    bind(server,(addr_t*)&addr,sizeof(addr));
    liseten(server,10);

    addr_in_t c_add={0};
    int c_add_len=sizeof(c_add);
    int client=accept(server,(addr_t*)&c_add,&c_add_len);

    while(1){
        /* char buf[64];
        int res=read(client,buf,64);
        if(res==0){
            printf("du kai\n");
            return 0;
        }
        printf("news:%s\n",buf);
 */
        int pack_size=0;
        read(client,&pack_size,4);

        pack_t pack;
        pack.size=pack_size;
        read(client,(char*)&pack+4,pack_size-4);

        read_pack(&pack);
    }
    return 0;
}
client.c
enum Type{
    TYPE_REGIST,
    TYPE_LOGIN
}
typedef struct Pack{
    int size ;
    enum Type type;
    char buf[2048];
    int count;
}pack_t;

void append(pack_t*pack,const char*data){
    char*buf=pack.buf;
    int len=strlen(data);

    *(short*)(buf+pack->count)=len;
    pack->count+=2;

    memcpy(buf+pack->count,data,len);
    pack->count+=len;

    pack->size=pack->count+8;
}
int main(int argc, char const *argv[]){
    int client=socket(AF_INET,SOCK_STREAM,0);
    addr_in_t addr={0};
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8888);
    addr.sin_addr.s_addr=inet_addr("192.168.126.189");
    connect(client,(addr_t*)&addr,sizeof(addr));

    while(1){
        /* char buf[64];
        printf("shuru:\n");
        scanf("%63s",buf);
        while(getchar()!=10);
        write(client,buf,64); */
        pack_t pack;
        pack.type=TYPE_LOGIN;

        char name[20];
        char pswd[20];
        printf("shu ru name\n");
        scanf("%19s",name);
        while(getchar()!=10);
        printf("shu ur mi ma\n");
        scanf("%19s",pswd);
        while(getchar()!=10);

        append(&pack,name);
        append(&pack,pswd);

        write(client,&pack,pack.size);
    }
    return 0;
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值