• 大小: 17KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: C  

资源简介

做项目时写的文件传输的源码,解决了很多的细节问题,拿出来与大家共享!

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int s;      //判断socket是否建立成功

void baswap(bdaddr_t *dst const bdaddr_t *src)
{
  register unsigned char *d = (unsigned char *) dst;
  register const unsigned char *s = (const unsigned char *) src;
  register int i;
  for (i = 0; i<6; i++)
     d[i] = s[5-i];
}

//将接收到的字符串型的设备地址转换成bdaddr_t数据结构完成蓝牙地址和字符串的互换
int str2ba(const char *str bdaddr_t *ba)       
{
  uint8_t b[6];
  const char *ptr = str;
  int i;

  for (i=0; i<6; i++) 
    {
      b[i] = (uint8_t) strtol(ptr NULL 16);
      if (i != 5 && !(ptr = strchr(ptr ‘:‘)))
         ptr = “:00:00:00:00:00“;
         ptr++;
    }
  baswap(ba (bdaddr_t *) b);
  return 0;
}

void sendData(char *dest)
{
   struct sockaddr_rc addr = {0};
   int status; 
   int i;
   FILE *in;                   //定义接收文件的指针
   char buf[512] = {0};          //接收文件的buf数组
   char filename[30] = {0};       //用于存放接收到的文件名字的数组

   //给该应用分配一个socket套接字
   s = socket(AF_BLUETOOTH SOCK_STREAM BTPROTO_RFCOMM);
   if(s < 0)
     {
       perror(“create socket error“);
       exit(1);
     }
   
   //设置连接的参数(确定是由哪两个设备进行连接)
   addr.rc_family = AF_BLUETOOTH;
   addr.rc_channel = (uint8_t)1;
   str2ba(dest &addr.rc_bdaddr);
   
   //连接起服务
   printf(“connectting...\n“);
   status = connect(s (struct sockaddr *)&addr sizeof(addr));
   
   // 建立好连接后进行文件的传输
   if(status==0)
    {
     printf(“success!\n“);
     status = write(s “hello!“ 6);  //测试通信,发送“hello”
     
     printf(“Please input need send file‘s name:\n“); 
     scanf(“%s“ filename);
     status = write(s filename sizeof(filename));  //发送传输文件的名字
 
     in = fopen( filename “rb“ );
     if( in==NULL )
       {
    printf(“Error:cannot open file!!!\n“);
    exit(0);
       }
     
     printf(“The document is transmitting............\n“);
     while( !feof(in) )
       {
        i = fread(&buf sizeof(buf) 1 in);    // 从文件中得到sizeof(buf)个字符 
        status = write(s &buf sizeof(buf) );
        memset(buf 0 sizeof(buf));
        if(status<0) 
         { 
          perror(“uh oh“);
         }
       }

     fclose(in);
     memset(buf 0 sizeof(buf));
     
     status = write(s “goodbye“ 7);  //发送文件传输完成的信号“goodbye“
     printf(“The file transfer finished!\n“);
    }
   else
    {
     printf(“Failed!\n“);
    }
}

int main( int argc  char **argv)
{  
   char *dest;                  //用于存放BT设备地址字符串的指针
   //用于判断起动该应用程序的命令中是否指定了服务器的设备地址
   if(argc==2)
     {
       dest=argv[1];
     }
   else
     {
       printf(“prarm error:please input buletooth‘s address\n“);
       exit(1);
     }
  sendData(dest); 
   
  close(s);  //关闭服务
  return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14216  2007-06-09 19:55  文件传输源码和可执行文件\fileClient

     文件       3235  2007-06-09 19:55  文件传输源码和可执行文件\fileClient.c

     文件      17173  2007-06-09 19:55  文件传输源码和可执行文件\fileServer

     文件       5455  2007-06-09 19:55  文件传输源码和可执行文件\fileServer.c

     目录          0  2008-06-03 23:05  文件传输源码和可执行文件

----------- ---------  ---------- -----  ----

                40079                    5


评论

共有 条评论