• 大小: 5.24MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-12
  • 语言: C/C++
  • 标签: C语言  飞秋  tcp  udp  

资源简介

基于C语言 利用TCP/UDP协议实现收发消息、文件上下线提醒等

资源截图

代码片段和文件信息

		#include “myhead.h“
#include “kernel_list.h“

struct client *head = NULL;//链表头
struct client
{
int connfd;//套接字
char port[100];//端口
char ip[100] ;//IP
char my_name[100];//用户名

struct list_head list;//小结构体
};

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//初始化锁
//=====================初始化=================================//
struct client *init_list(void)
{
struct client *head = malloc(sizeof(struct client));

if (head != NULL)
 {
  INIT_LIST_HEAD(&head->list);
 } 
 return head;
}

bool find(char name[]char port[])
{
struct list_head *pos;
struct client *tmp;
list_for_each(pos&head->list)
{
tmp = list_entry(posstruct clientlist);
if (strcmp(tmp->my_namename) == 0 && strcmp(tmp->portport) == 0)
{
return true;
}


}
return false;
}
void *receive_radio(void *arg)  //接收广播
{
//1、创建udp套接字
int fd = socket(AF_INETSOCK_DGRAM0);

//2、设置端口重用
int on = 1;
setsockopt(fdSOL_SOCKETSO_REUSEADDR&onsizeof on);

//3、绑定本地IP+PORT
struct sockaddr_in srvaddrcliaddr;
bzero(&srvaddrsizeof(srvaddr));
srvaddr.sin_family = AF_INET;
srvaddr.sin_port = htons(58888);
srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); 

bind(fd(struct sockaddr *)&srvaddrsizeof(srvaddr));
//4、接收数据
char msg[100];
char name[100];
char port[100];
socklen_t len = sizeof(cliaddr);
printf(“用户上下线提醒\n“);
while(1)
{
bzero(msg100);
bzero(name100);
bzero(port100);

int data = recvfrom(fdmsgsizeof(msg)0(struct sockaddr *)&cliaddr&len);
if (data == -1)
{
perror(“广播接收失败!“);
exit(-1);
}
sscanf(msg“%s %s“portname);
//printf(“%s\n“ msg);
if (strstr(msg“Go online“) != NULL)
{
struct client *new = malloc(sizeof(struct client)) ;
if (find(nameport) == false)
{
strcpy(new->ipinet_ntoa(cliaddr.sin_addr));
strcpy(new->my_namename);
new->connfd = fd;
strcpy(new->portport);
pthread_mutex_lock(&mutex);
list_add_tail(&new->list&head->list);
pthread_mutex_unlock(&mutex);
printf(“%s\n“ msg);
}
}

if (strstr(msg“downline“) != NULL)
{
bzero(name100);
sscanf(msg“%s“name);
struct list_head *pos*n;
struct client *tmp;
list_for_each_safe(posn&head->list)
{
tmp = list_entry(posstruct clientlist);
if (strcmp(tmp->my_namename) == 0)
{
pthread_mutex_lock(&mutex);
list_del_init(&tmp->list);
pthread_mutex_unlock(&mutex);
printf(“%s\n“ msg);
break;
}
}


}
//sleep(1);

}
//5、关闭套接字
close(fd);
pthread_exit(NULL);

}

void *send_broadcast(void *arg)  //发送广播
{
char *buf = (char *)arg;
//1、创建udp套接字
int fd = socket(AF_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-09 15:28  简易飞秋\
     文件       12018  2018-08-09 10:03  简易飞秋\1.txt
     文件     2950470  2018-04-19 14:55  简易飞秋\2.pdf
     目录           0  2018-08-09 20:09  简易飞秋\bin\
     文件       21552  2018-08-09 09:20  简易飞秋\bin\.fuse_hidden0000017300000089
     文件       21552  2018-08-09 09:59  简易飞秋\bin\.fuse_hidden000001770000008d
     文件       21552  2018-08-09 20:09  简易飞秋\bin\ljx
     目录           0  2018-08-09 11:19  简易飞秋\file\
     目录           0  2018-08-09 08:53  简易飞秋\include\
     文件        7422  2016-09-08 10:03  简易飞秋\include\kernel_list.h
     文件         497  2018-08-02 14:20  简易飞秋\include\myhead.h
     文件          81  2018-08-09 09:03  简易飞秋\makefile
     目录           0  2018-08-09 11:24  简易飞秋\src\
     文件       17020  2018-08-09 11:24  简易飞秋\src\main.c
     文件         162  2018-08-09 15:28  简易飞秋\~$项目说明.doc
     文件     2659328  2018-08-09 09:52  简易飞秋\项目说明.doc

评论

共有 条评论