资源简介
飞鸽传书(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
相关资源
- 基于MFC的TCP调试助手源码95706
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- 安科瑞智能电能表MODBUS通讯程序 VC6
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
评论
共有 条评论