最简单的 服务器 客户端
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;
}