资源简介

使用Linux内核链表实现多客户端连接服务器,里面有三种功能,1、TCP多人连接客户端,服务器可以把信息发给多个用户;2、TCP多人连接客户端,可以把信息发给指定的某个用户;3、服务器接收多个客户端传送过来的文件。

资源截图

代码片段和文件信息

//1.TCP多人连接客户端,服务器可以把信息发给多个用户
//就像QQ群一样
/*
#include 
#include 
#include 
#include 
#include 
#include 
#include 



void *routine(void *arg)
{
int sockfd = *(int *)arg;
char buf[1024];
while(1)
{
bzero(buf 1024);

int ret = read(sockfd buf sizeof(buf));
if(ret <= 0)
{
break;
}
printf(“recv data: %s\n“ buf);
if(strcmp(buf “end“) == 0)
{
printf(“对方已经退出\n“);
}
}

}

int main(int argc char const *argv[])
{
int sockfd = socket(AF_INET SOCK_STREAM 0);
if(sockfd == -1)
{
perror(“socket failed“);
return -1;
}

struct sockaddr_in server;
int len = sizeof(struct sockaddr_in);
memset(&server 0 len);

server.sin_family = AF_INET;
server.sin_port   = htons(atoi(argv[1]));
server.sin_addr.s_addr = inet_addr(argv[2]);

int ret = connect(sockfd (struct sockaddr *)&server len);
if(ret == -1)
{
perror(“connect failed“);
close(sockfd);
return -1;
}

pthread_t tid;
pthread_create(&tid NULL routine (void *)&sockfd);
pthread_detach(tid);


char buf[100];
while(1)
{
memset(buf 0 sizeof(buf));
scanf(“%[^\n]“ buf);
while(getchar() != ‘\n‘);

write(sockfd buf strlen(buf));
if(strcmp(buf “end“) == 0)
{
break;
}
}

return 0;
}
*/

//2.TCP多人连接客户端,可以把信息发给指定的某个用户
/*#include 
#include 
#include 
#include 
#include 
#include 
#include 



void *routine(void *arg)
{
int sockfd = *(int *)arg;
char buf[1024];
while(1)
{
bzero(buf 1024);

int ret = read(sockfd buf sizeof(buf));
if(ret <= 0)
{
break;
}
printf(“recv data: %s\n“ buf);
if(strcmp(buf “end“) == 0)
{
printf(“对方已经退出\n“);
}
}

}

int main(int argc char const *argv[])
{
int sockfd = socket(AF_INET SOCK_STREAM 0);
if(sockfd == -1)
{
perror(“socket failed“);
return -1;
}

struct sockaddr_in server;
int len = sizeof(struct sockaddr_in);
memset(&server 0 len);

server.sin_family = AF_INET;
server.sin_port   = htons(atoi(argv[1]));
server.sin_addr.s_addr = inet_addr(argv[2]);

int ret = connect(sockfd (struct sockaddr *)&server len);
if(ret == -1)
{
perror(“connect failed“);
close(sockfd);
return -1;
}

pthread_t tid;
pthread_create(&tid NULL routine (void *)&sockfd);
pthread_detach(tid);


int selfid = 0;
printf(“self:“); scanf(“%d“ &selfid);

char buf[100];
while(1)
{
int toid = 0;
memset(buf 0 sizeof(buf));

printf(“toid:“);scanf(“%d“ &toid);
printf(“data:“);while(getchar() != ‘\n‘);
scanf(“%s“ buf);




char sendbuf[1024]={0};
sprintf(sendbuf “id:%dto:%ddata:%s“ selfid toid buf);
write(sockfd sendbuf strlen(sendbuf));
if(strcmp(buf “end“) == 0)
{
break;
}
}

return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7887  2018-01-10 11:22  client_server\client

     文件       4950  2018-01-10 11:16  client_server\client.c

     文件       7628  2015-08-04 15:27  client_server\kernel_list.h

     文件      12461  2018-01-10 11:22  client_server\server

     文件      11398  2018-01-09 16:42  client_server\server.c

     目录          0  2018-01-10 11:22  client_server

----------- ---------  ---------- -----  ----

                44324                    6


评论

共有 条评论