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();
}
}
}
|