资源简介

飞鸽传书(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


评论

共有 条评论