public
partial
class
Form1 : Form
{
BluetoothRadio radio =
null
;
//藍(lán)牙適配器
string
sendFileName =
null
;
//發(fā)送文件名
BluetoothAddress sendAddress =
null
;
//發(fā)送目的地址
ObexListener listener =
null
;
//監(jiān)聽器
string
recDir =
null
;
//接受文件存放目錄
Thread listenThread, sendThread;
//發(fā)送/接收線程
public
Form1()
{
InitializeComponent();
radio = BluetoothRadio.PrimaryRadio;
//獲取當(dāng)前PC的藍(lán)牙適配器
CheckForIllegalCrossThreadCalls =
false
;
//不檢查跨線程調(diào)用
if
(radio ==
null
)
//檢查該電腦藍(lán)牙是否可用
{
MessageBox.Show(
"這個(gè)電腦藍(lán)牙不可用!"
,
"提示"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
recDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
labelRecDir.Text = recDir;
}
private
void
buttonSelectBluetooth_Click(
object
sender, EventArgs e)
//選擇遠(yuǎn)程藍(lán)牙設(shè)備
{
SelectBluetoothDeviceDialog dialog =
new
SelectBluetoothDeviceDialog();
dialog.ShowRemembered =
true
;
//顯示已經(jīng)記住的藍(lán)牙設(shè)備
dialog.ShowAuthenticated =
true
;
//顯示認(rèn)證過的藍(lán)牙設(shè)備
dialog.ShowUnknown =
true
;
//顯示位置藍(lán)牙設(shè)備
if
(dialog.ShowDialog() == DialogResult.OK)
{
sendAddress = dialog.SelectedDevice.DeviceAddress;
//獲取選擇的遠(yuǎn)程藍(lán)牙地址
labelAddress.Text =
"地址:"
+ sendAddress.ToString() +
" 設(shè)備名:"
+ dialog.SelectedDevice.DeviceName;
}
}
private
void
buttonSelectFile_Click(
object
sender, EventArgs e)
//選擇要發(fā)送的本地文件
{
OpenFileDialog dialog =
new
OpenFileDialog();
if
(dialog.ShowDialog() == DialogResult.OK)
{
sendFileName = dialog.FileName;
//設(shè)置文件名
labelPath.Text = Path.GetFileName(sendFileName);
}
}
private
void
buttonSend_Click(
object
sender, EventArgs e)
//發(fā)送按鈕
{
sendThread =
new
Thread(sendFile);
//開啟發(fā)送文件線程
sendThread.Start();
}
private
void
sendFile()
//發(fā)送文件方法
{
ObexWebRequest request =
new
ObexWebRequest(sendAddress, Path.GetFileName(sendFileName));
//創(chuàng)建網(wǎng)絡(luò)請求
WebResponse response =
null
;
try
{
buttonSend.Enabled =
false
;
request.ReadFile(sendFileName);
//發(fā)送文件
labelInfo.Text =
"開始發(fā)送!"
;
response = request.GetResponse();
//獲取回應(yīng)
labelInfo.Text =
"發(fā)送完成!"
;
}
catch
(System.Exception ex)
{
MessageBox.Show(
"發(fā)送失?。?
,
"提示"
, MessageBoxButtons.OK, MessageBoxIcon.Warning);
labelInfo.Text =
"發(fā)送失敗!"
;
}
finally
{
if
(response !=
null
)
{
response.Close();
buttonSend.Enabled =
true
;
}
}
}
private
void
buttonselectRecDir_Click(
object
sender, EventArgs e)
//選擇接受目錄
{
FolderBrowserDialog dialog =
new
FolderBrowserDialog();
dialog.Description =
"請選擇藍(lán)牙接收文件的存放路徑"
;
if
(dialog.ShowDialog() == DialogResult.OK)
{
recDir = dialog.SelectedPath;
labelRecDir.Text = recDir;
}
}
private
void
buttonListen_Click(
object
sender, EventArgs e)
//開始/停止監(jiān)聽
{
if
(listener ==
null
|| !listener.IsListening)
{
radio.Mode = RadioMode.Discoverable;
//設(shè)置本地藍(lán)牙可被檢測
listener =
new
ObexListener(ObexTransport.Bluetooth);
//創(chuàng)建監(jiān)聽
listener.Start();
if
(listener.IsListening)
{
buttonListen.Text =
"停止"
;
labelRecInfo.Text =
"開始監(jiān)聽"
;
listenThread =
new
Thread(receiveFile);
//開啟監(jiān)聽線程
listenThread.Start();
}
}
else
{
listener.Stop();
buttonListen.Text =
"監(jiān)聽"
;
labelRecInfo.Text =
"停止監(jiān)聽"
;
}
}
private
void
receiveFile()
//收文件方法
{
ObexListenerContext context =
null
;
ObexListenerRequest request =
null
;
while
(listener.IsListening)
{
context = listener.GetContext();
//獲取監(jiān)聽上下文
if
(context ==
null
)
{
break
;
}
request = context.Request;
//獲取請求
string
uriString = Uri.UnescapeDataString(request.RawUrl);
//將uri轉(zhuǎn)換成字符串
string
recFileName = recDir + uriString;
request.WriteFile(recFileName);
//接收文件
labelRecInfo.Text =
"收到文件"
+ uriString.TrimStart(
new
char
[] {
'/'
});
}
}
private
void
Form1_FormClosed(
object
sender, FormClosedEventArgs e)
{
if
(sendThread !=
null
)
{
sendThread.Abort();
}
if
(listenThread !=
null
)
{
listenThread.Abort();
}
if
(listener !=
null
&& listener.IsListening)
{
listener.Stop();
}
}
}