2025年3月19日

1.服务器(不怎么会)

#include "head.h"
void insert_client(int* arr,int client,int* len)
{
	arr[*len]=client;
	(*len)++;
}
void remove_client(int* arr,int client,int* len)
{
	int i=0,j=0;
	for(i=0;i<*len;i++)
	{
		if(arr[i]==client);
		break;
	}
		if(i==*len)
			return;
		for(j=i;j<*len;j++)
		{
			arr[j]=arr[j+1];
		}
		arr[j]=0;
		(*len)--;
	}
int main(int argc, const char *argv[])
{
   if(argv<2)
  {
	  printf("请输入端口号:\n");
	  return 1;
  }
 	int port=atoi(argv[1]);//转变argv的数据类型
	int server=socket(AF_INET,SOCK_STREAM,0);//创建套接字
	struct sockaddr_in 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,(struct sockaddr*)&addr,sieof(addr))==-1)//将IP和port放入套接字
	{   
		perror("bind");
		return 1;
	}
	listen(server,50);//监听
    int client_arr[64]={0};//存放客户端
	int arr_len=0;//数组长度
	fd_set readfds;//创建select监视列表
	FD_ZERO(&readfds;//初始化列表
			//监视描述符
	FD_SET(server,&readfds);
	FD_SET(STDIN FILENO,&readfds);

	while(1)
	{
	fd_set temp=readfds;
	select(1024,&temp,0,0,0);
	if(FD_ISSET(0,&temp))
	{
	char buf[1024]="";
	scanf("%s",buf);
	getchar();
	printf("键盘输入数据:%s\n",buf);
	}
    if(FD_ISSET(server,&temp))
	{
	int client = accept(server,0,0);
	printf("有新客户端连接\n");
	FD_SET(client,&readfds);
	insert_client(client_arr,client,&arr_len);
	}
	for(int i=0;i<arr_len;i++)
	{
		int client=client_arr[i];
		if(FD_ISSET(client,&temp))
		{
			pack_t pack={0};
			int size=0;
			int res=read(client,&size,4);
			if(res==0)
			{
				printf("客户端断开连接\n");
				FD_CLR(client,&readfds);
				remove_client(client_arr,client,&arr_len);
				close(client);
				break;
			}
			read(client,(char*)&pack+4,size-4);
			char** list=analysis(pack);
			printf("%s\n",list[0]);
			printf("%s\n",list[1]);
			freeList(list);
		}
	}
	}
	return 0;
}

2.客户端1

#include "head.h"
typedef struct pack{
	char name[20];
	char pswd[20];
	char text[168];
}pack_t;

int main(int argc, const char *argv[])
{   
	if(argv<2)
	{
		printf("please inter port:\n");
		return 1;
	}
	int port=atoi(argv[1]);
	int client = socket(AF_INET,SOCK_STREAM,0);
	struct socketaddr_in addr ={0};
	addr.sin_family=AF_INET;
	addr.sin_port=htons(port);
	addr.sin_addr.s_addr=inet_addr("192.168.125.128");
	if(connect(client,(struct sockaddr*)&addr,sizeof(addr))==-1)
	{
		perror("connect");
		return 1;
	}
 struct pollfd list[50]={0};
 int list_len =0 ;
 struct pollfd client_fd={fd:client,events:POLLOUT,revents:0};
 struct pollfd stdin_fd={fd:0,events:POLLOUT,revents:0};
 insert_server(list,client_fd,&list_len);
 insert_server(list,stdin_fd,&list_len);

	while(1)
	{   
 poll(list,list_len,-1);
 int i=0;                
 for(i=0;i<list_len;i++)
 {
 if(list[i].revents==0)
 {
     continue;
 }

        int fd=list[i].fd;
		if(fd==0)
		{
			
  char buf[1024]="";
  scanf("%s",buf);
  getchar();
  printf("please inter data:%s\n",buf);
		}
 else if(fd==client)                                              
 {
     int server=connect(client,(struct sockaddr*)&addr,sizeof(addr));
     struct pollfd client_fd={fd:server,events:POLLOUT,revents:0};
	 }

		pack_t pack={0};
		printf("please inter name:\n");
		scanf("%19s",pack.name);
		getchar();
		printf("please inter pswd:\n");
		scanf("%19s",pack.pswd);
		getchar();
		printf("please inter text:\n");
		scanf("%19s",pack.text);
		getchar();
		write(client,&pack,sizeof(pack));
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/strong_butter/article/details/146386788
今日推荐