wince 蓝牙发送文件的问题
自由的奴隶 2010-05-05 10:56:49 我的设备做client端,向server端发送文件.首先,用winsock建立一个连接,这步成功了.然后,我读取一个文件
,从文件中一次读一个buffer,用send去发送,第一发送后的返回值是对的,就是实际的buffer的长度,但是这时我发现
server端的连接已经断开了,所以再发送下一个buffer时就出错了,代码如下,大家给看看吧.
//1.Setup connect by client socket.
WSADATA wsd;
WSAStartup (MAKEWORD(1,0), &wsd);
SOCKET client_socket = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);
if (client_socket == INVALID_SOCKET) {
wprintf (L"socket failed, error %d\n", WSAGetLastError ());
return FALSE;
}
SOCKADDR_BTH sa;
memset (&sa, 0, sizeof(sa));
sa.addressFamily = AF_BT;
sa.btAddr = b; //b is a BT_ADDR variable
if (*pServiceClassId)
GetGUID(pServiceClassId, &sa.serviceClassId);
else if (channel)
sa.port = channel & 0xff;
else
{
WSACleanup();
return FALSE;
}
if (connect (client_socket, (SOCKADDR *)&sa, sizeof(sa)))
{
//Perform error handling.
DWORD dwErrorCode;
dwErrorCode = WSAGetLastError();
closesocket (client_socket);
WSACleanup();
return FALSE;
}
//2.Open a file and send it to bt device.
TCHAR szFileName[MAX_PATH]={0};
GetFileName(szFileName);
FILE *fp = _wfopen (szFileName, L"r");
if (fp)
{
for ( ; ; )
{
unsigned char buf[128] = {0};
int c = fread (buf, 1, sizeof(buf), fp);
if (c <= 0)
break;
int x = send (client_socket, (const char *)buf, c, 0);
//就在这里,server端的连接就断开了!!!
if (x == SOCKET_ERROR)
{
DWORD dwErrorCode;
dwErrorCode = WSAGetLastError();
break;
}
if (x != c)
{
//wprintf (L"send returns %d, Error = %d\n", x, WSAGetLastError ());
DWORD dwErrorCode;
dwErrorCode = WSAGetLastError();
break;
}
}
fclose (fp);
}
else
{
closesocket (client_socket);
WSACleanup();
return FALSE;//wprintf (L"Cannot open\n");
}
//3.Close connect.
closesocket(client_socket);
WSACleanup();
return TRUE;