资源简介
飞鸽传书(IP Messenger,简为IPMsg)是一个小巧方便的即时通信软件,它适合用于局域网内甚至广域网间进行实时通信和文档共享。特别是在局域网内传送文件/文件夹的速度非常快! 代码有注释,适合初学者
代码片段和文件信息
/* ************************************************************************
* Filename: command.c
* Description:
* Version: 1.0
* Created: 2010年10月10日 09时23分07秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME ()
* Company:
* ************************************************************************/
#include “myinclude.h“
#include “user_manager.h“
#include “communication.h“
#include “user_interface.h“
static int udpfd; //UDP socket描述符
static char user_name[20] = ““;//用户名
static char host_name[30] = ““;//主机名
FINFO recv_buf[5];//保存一次接收的n个文件的信息,每个元素
//保存一共文件的信息,方便以后索引
/*创建一个套接字,将其与本机的ip和
2424端口绑定并设置其多播的属性*/
void create_server()
{
int broadcast=1;
struct sockaddr_in addr = {AF_INET}; //初始化一个网络地址
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
udpfd = socket(AF_INETSOCK_DGRAM0);
if(udpfd < 0)
IPMSG_OUT_MSG_COLOR(perror(“Socket UDP“);)
if(bind(udpfd (struct sockaddr*)&addr sizeof(addr))<0)
IPMSG_OUT_MSG_COLOR(perror(“Bind UDP“);)
setsockopt(udpfdSOL_SOCKETSO_BROADCAST&broadcast sizeof(int));
}
/*下面几个函数都是让其他文件可以使用这些内
部连接的变量,在其他文件对这些变量赋值*/
int udp_fd(void)
{
return udpfd;
}
char *user(void)
{
return user_name;
}
char *host(void)
{
return host_name;
}
/*该函数,广播一个IPMSG_BR_ENTRY的包文,
可以让同一个局域网中端口为2425的应用程
序收到这个消息,以告诉对方,该用户已经
上线*/
void online(void)
{
char buf[100]=““;
struct sockaddr_in addr = {AF_INET};
int t = time((time_t *)NULL);
//初始化目标网络地址
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr(“192.168.220.255“);
//学习这种组建buf的方式
int len = sprintf(buf“1:%d:%s:%s:%ld:%s“
tuser_namehost_nameIPMSG_BR_ENTRYuser_name);
//广播一个包文
sendto(udpfd buf len 0 (struct sockaddr*)&addrsizeof(addr));
}
/*系统初始化函数*/
void sysinit(char *user char *host)
{
//只要使用内部连接变量的函数与该变量在同一个文件中定义,
//则无论该函数在哪里出现都不会因为引用该变量出错
strcpy(user_nameuser);
strcpy(host_namehost);
create_server();
online();
}
/*应答上线用户*/
static void answer_entry(int pkgnum struct sockaddr_in addr)
{
char buf[100];
int len = 0;
//组建包文
len = sprintf(buf“1:%d:%s:%s:%ld:%s“pkgnumuser()
host()IPMSG_ANSENTRYuser());
//发送包文
sendto(udp_fd()buflen0(struct sockaddr*)&addrsizeof(addr));
}
/*打印收到的消息,发送该消息的包文,不带文件属性信息*/
static void print_msg(char *sender char *msgbuf)
{
printf(“\n%s: %s\n\n“ sender msgbuf);//打印发送者,消息
write(1“\rIPMSG:“7);
fflush(stdout);
}
/*判断接收到包文是否是接收文件的包文*/
static int isrecvfile(long cmddata)
{
//cmddata为接收到的命令字
if((IPMSG_SENDMSG|IPMSG_FILEATTACHOPT|IPMSG_READCHECKOPT|
IPMSG_SENDCHECKOPT|IPMSG_SECRETOPT) == cmddata)
return 1;
else
return 0;
}
/*保存等待接收的文件信息(报文的包编号、文件序
号、文件名、文件大小、最新修改时间、偏移量、文
件模式、发送者的ip)*/
static void save_file_info(int msgnumlong cmddatachar *msgbufchar *sender
char *attrbufstruct sockaddr_in addr)
{
int i = 0;
int j = 0;
int t = time((time_t *)NULL); //获取包编号
char *p[5] = {NULL}; //用于存放文件的属性,一共可以存放
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 16384 2018-05-23 15:29 ipmsg\.communication.c.swp
文件 6802 2010-10-13 00:26 ipmsg\communication.c
文件 887 2010-10-12 16:21 ipmsg\communication.h
文件 4928 2010-10-12 14:30 ipmsg\communication.o
文件 126 2010-10-12 11:14 ipmsg\down\hello.txt
文件 397 2010-10-12 13:25 ipmsg\down\log.c
文件 3772 2010-10-12 14:35 ipmsg\down\main.c
文件 2055 2010-10-12 14:31 ipmsg\down\txt.c
文件 19592 2010-10-12 16:22 ipmsg\ipmsg
文件 5942 2010-10-10 14:31 ipmsg\ipmsg.h
文件 965 2010-10-12 16:14 ipmsg\main.c
文件 1232 2010-10-12 16:22 ipmsg\main.o
文件 195 2010-10-11 08:10 ipmsg\makefile
文件 804 2010-10-11 07:58 ipmsg\myinclude.h
文件 9043 2018-05-10 15:52 ipmsg\myinclude.h.gch
文件 5124 2010-10-12 16:33 ipmsg\mytcp.c
文件 598 2010-10-12 16:16 ipmsg\mytcp.h
文件 6492 2010-10-12 16:22 ipmsg\mytcp.o
文件 8348 2010-10-12 15:18 ipmsg\user_interface.c
文件 897 2010-10-12 16:19 ipmsg\user_interface.h
文件 5716 2010-10-12 15:18 ipmsg\user_interface.o
文件 3473 2010-10-12 16:22 ipmsg\user_manager.c
文件 1023 2010-10-12 16:22 ipmsg\user_manager.h
文件 2360 2010-10-12 16:22 ipmsg\user_manager.o
目录 0 2010-11-26 13:05 ipmsg\down
目录 0 2018-05-23 15:42 ipmsg
----------- --------- ---------- ----- ----
107155 26
相关资源
- C语言嵌入式Modbus协议栈,支持主站和
- OLED驱动源码
- tm1650+stm32f103源码(board_tm1650.c)
- cheat engine 7.2源码
- CrySearch内存搜索器源码
- C语言封装的HttpClient接口
- FTP客户端源码(c++)
- MFC视频播放器源码(支持avi/wma/mp3等格
- CreatBitmap图片合成源码
- vs2008 can总线通讯源码
- 宠物管理系统课程设计(源码+数据库
- C语言课设计算器
- C语言 学生兴趣管理系统
- Windows扩展命令程序(源码)
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- 鼠标连点器(附源码)
- c++ 简易贪吃蛇源码
- c语言实现竞技比赛打分系统
- 杀毒软件源码
- 经典外汇智能交易程序Amazing3.1源码(
- KMP算法C语言程序
- 微型文件系统源码(FatFs)
- 海康私有流分析接口源码(附使用说
- VC6 USB开发源码
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- SVM算法实现(源码+文档)
- 俄罗斯方块游戏源码(Tetris)
- 林锐—高质量C编程
评论
共有 条评论