c语言文件发送程序,C语言socket 蓝牙文件传输

#ifdef HAVE_CONFIG_H

#include

#endif

#define DEBUG

#include

#include

#include

#include

#include

#include

#include

#include /* File control definitions */

#include /* Error number definitions */

#include /* POSIX terminal control definitions */

#include /* Mluti-programming definitions*/

#include "bluetooth/bluetooth.h"

#include "bluetooth/hci.h"

#include "bluetooth/hci_lib.h"

#include "bluetooth/l2cap.h"

#include "bluetooth/sdp.h"

#include "bluetooth/sdp_lib.h"

#include "bluetooth/sco.h"

#include "bluetooth/tcs.h"

#define MAX_LEN 32

/********* for debug***********************************/

#ifdef DEBUG

void debug(char * str)

{

printf(str);

}

#else

#define debug(str)

#endif

#define BUFFER_SIZE 512

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];

}

int ba2str(const bdaddr_t *ba, char *str)

{

uint8_t b[6];

baswap((bdaddr_t *) b, ba);

return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",

b[0], b[1], b[2], b[3], b[4], b[5]);

}

/*****************GLOBAL VARIABLE***********************************/

//unsigned char option;

struct sockaddr_l2 loc_addr={0}, rem_addr = {0}; // for l2cap

int s;

int result;

int client;

int bytes_read;

char buf[30];

int opt = sizeof(rem_addr);

char addr[18];

int fd;

/*==============================================================================* * EXPORT FUNCITON DEFINATION (FOR GATEWAY) * *==============================================================================*/

void tcs_init(void)

{

//unsigned char* addr;

debug("\n||========== get tcs initialized =============||\n");

debug("(1) tcs init: opening l2cap socket...\n");

//allocate socket

s = socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP);

if(s < 0)

{

printf("create socket in gateway failed...\n");

exit(1);

}

else

{

debug(" open socket success!\n");

}

//bind socket to port 0x1001 of the first available bluetooth adaptor

loc_addr.l2_family = AF_BLUETOOTH;

loc_addr.l2_psm = htobs(0x1001);

loc_addr.l2_bdaddr = *BDADDR_ANY;

//ba2str(&loc_addr.l2_bdaddr,addr);

ba2str(&(*BDADDR_ANY),addr);

printf("local address is %s\n",addr);

debug("(2) binding socket...\n");

result = bind(s,(struct sockaddr*)&loc_addr, sizeof(loc_addr));

if(result < 0)

{

printf("bind socket error...\n");

close(s);

exit(1);

}

else

{

debug(" binding socket success!\n");

}

printf("(3) listening..\n");

result = listen(s,1);

if(result < 0)

{

debug("listening error...\n");

exit(1);

}

else

{

debug(" requested!\n");

}

debug("||==========initialize end ================||\n\n");

// gw_add_sco();

}

int gw_process()

{

char c;

// debuggateway proceeding...\n\n");

printf("1)accepting...\n");

client = accept(s,(struct sockaddr*)&rem_addr,&opt);

if(client < 0)

{

printf("accept error\n");

exit(1);

}

else

{

printf("accept succes!\n\n");

}

ba2str(&rem_addr.l2_bdaddr,buf);

printf("remote address is %s \n",buf);

memset(buf,0,sizeof(buf));

/* while(1) { bytes_read = read(client,buf,sizeof(buf)); if(bytes_read > 0) { printf("buffer_received :%s\n",buf); memset(buf,0,sizeof(buf) ); } } */

memset(buf,0,sizeof(buf));

int length = 0;

int len = 0;

char bufm[20];

char file_name[20];

len = recv(client,bufm ,sizeof(bufm),0);

if(len < 0)

printf("receive file_name error");

strncpy(file_name,bufm,len);

printf("%s",file_name);

FILE *fp;

if((fp = fopen(file_name,"w++"))== NULL)

{

printf("error");

return -1;

}

sleep(1);

while(length = recv(client, buf, sizeof(buf), 0))

{

if (length < 0)

{

printf("Recieve Data From Server Failed!\n");

break;

}

int write_length = fwrite(buf, sizeof(buf), length, fp);

if (write_length < length)

{

printf("File:\t Write Failed!\n");

break;

}

memset(buf,0,sizeof(buf));

}

close(client);

close(s);

return 0;

}

int main()

{

debug("begining..now.\n");

fd=open_port(fd,3);

set_opt(fd,115200, 8, 'N', 1);

tcs_init();

gw_process();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值