欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【无标题】

【无标题】

2025/4/15 20:48:22 来源:https://blog.csdn.net/m0_74302826/article/details/145503004  浏览:    关键词:【无标题】

客户端

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;	enum Dype{DYPE_ENROLL,DYPE_LOGIN
};
typedef struct past_t{int past_size;enum Dype dype;char buf[2048];int count;
}past_t;void append(past_t* past,const char* data)
{char* buf = past->buf;short len = strlen(data);*(short*)(buf+past->count) = len;past->count += 2;memcpy(buf+past->count,data,len);past->count += len;past->past_size = past->count + 8;
}
int main(int argc, const char *argv[])
{if(argc < 3){printf("请输入端口号和服务器IP\n");return -1;}int port = atoi(argv[1]);int chient_socket_fd = socket(AF_INET,SOCK_STREAM,0);addr_in_t addr = {0};addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(argv[2]);if(connect(chient_socket_fd,(addr_t*)&addr,sizeof(addr)) == -1){perror("connect");return -1;}while(1){past_t past = {0};char name[20] = {0};char pswd[20] = {0};printf("账号:");scanf("%s",name);while(getchar()!=10);printf("密码:");scanf("%s",pswd);while(getchar()!=10);append(&past,name);append(&past,pswd);write(chient_socket_fd,&past,past.past_size);}return 0;
}

服务端

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>#include "link.h"
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;enum Dype{DYPE_ENROLL,DYPE_LOGIN
};
typedef struct past_t{int past_size;enum Dype dype;char buf[2048];int count;
}past_t;
void server_read(node_t* p,past_t* past)
{char* buf = past->buf;int res = 0;short len = *(short*)(buf+res);res += 2;data_t temp = {0};memcpy(temp.name,buf+res,len);res += len;short len1 = *(short*)(buf+res);res += 2;memcpy(temp.pswd,buf+res,len1);link_write(p,temp);}
int main(int argc, const char *argv[])
{signal(SIGINT,handler);if(argc < 2){printf("请输入湍口号\n");return -1;}node_t* p = NULL;link_create(&p);int port = atoi(argv[1]);int server_socket_fd = socket(AF_INET,SOCK_STREAM,0);addr_in_t addr = {0};addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr("0.0.0.0");if(bind(server_socket_fd,(addr_t*)&addr,sizeof(addr)) == -1){perror("bind");return -1;}listen(server_socket_fd,10);addr_in_t chient_addr = {0};int chient_addr_len = sizeof(chient_addr);int chient_socket_fd = accept(server_socket_fd,(addr_t*)&chient_addr,&chient_addr_len);if(chient_socket_fd == -1){perror("accept");return -1;}printf("客户端已连接\n");while(1){past_t past = {0};int res = read(chient_socket_fd,&past.past_size,4);if(res == 0){return -1;}read(chient_socket_fd,(char*)&past+4,past.past_size-4);server_read(&past);}return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "link.h"void link_create(node_t** p)
{*p = (node_t*)malloc(node_t);if(*p == NULL ){printf("链表创建失败\n");return;}(*p)->next = NULL;(*p)->len = 0;
}void link_write(node_t* p,data_t data)
{node_t* ptr = (node_t*)malloc(node_t);if(ptr == NULL){printf("节点创建失败\n");return;}ptr->data = data;ptr->next = p->next;p->next = ptr;p->len++;
}
void link_show(node_t* p)
{if(p == NULL||p->next == NULL){printf("查看失败\n");return;}node_t* ptr = p->next;while(ptr){printf("name:%s\npswd:%s\n",ptr->data.name,ptr->data.pswd);ptr = ptr->next;}
}void link_free(node_t** p)
{if(*p == NULL){return;}if(*p->next == NULL){free(*p);*p = NULL;return;}while((*p)->next){node_t* ptr = *p;while(ptr->next){ptr = ptr->next;}free(ptr);}free(*p);*p = NULL;}

#ifndef __LINK_H__
#define __LINK_H__typedef struct data_t
{char name[20];char pswd[20];
}
typedef struct node_t
{union {int len;data_t data;};struct node_t* next;
}node_tvoid link_create(node_t** p)void link_write(node_t* p,data_t data)void link_show(node_t* p)
void link_free(node_t** p)
#endif

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词