资源简介
基于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++源码
相关资源
- 基于MFC的TCP调试助手源码95706
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
评论
共有 条评论