资源简介
基于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
- 上一篇:mfc工资管理系统.rar
- 下一篇:用于人脸识别的lbp算法C++源码
相关资源
- 飞机大战C语言游戏代码
- C语言共享单车管理系统
- 最简单的C语言俄罗斯方块
- 数据结构课程程序设计实践运动会分
- 华中科技大学计算机学院C语言实验报
- 坦克大战C语言easyx图形插件源代码
- C语言课设,学生证管理系统
- 《数据结构》C语言版教程
- C语言代码夜夜爱消除
- c语言库函数源代码包含string.h
- C语言读取文件数据,写入内存
- C语言程序设计第二版
- 基于单片机的温控流水灯proteus仿真图
- STM32 RTC+LCD12864 实时时钟和闹钟实验
- C语言教程从入门到精通(含100例)
- 闹钟c语言大一写的智慧闹钟
- 基于HMM语音识别的C语言实现
- 全国计算机等级考试-二级教程-C语言
- c语言程序设计课设 大鱼吃小鱼
- C语言实现TCP连接
- 单片机c语言和汇编语言混合编程详解
- 数据结构大作业杂志管理系统
- 深入体验c语言项目开发源码.rar
- 数据结构与算法分析:C语言描述 源码
- 现代编译原理C语言描述-高清-完整目
- 数据结构与算法分析:C语言描述_原书
- 数据结构课程设计公交线路图.rar
- c++(socket)音频传输
- 新华三C语言笔试题18年两套.rar
- C语言进阶_重点、难点与疑点解析-完
评论
共有 条评论