前提・実現したいこと
PC-Android間でBluetoothのシリアル接続を用いてファイルを送受信するプログラムを作っています。
サーバPCは1台、クライアントAndroid端末は複数台、オフライン環境での使用を想定しています。
現在、PC側でシリアルポートのオープン、Android側でPCのMACアドレスを指定して通信・ファイル送受信ができています。
今の実装方法だと、すべてのAndroid端末にファイルが送られてくることになるので、
特定のAndroid端末にだけファイルを送信するといった感じに修正したいのですが、全く方法が分かりません。
PC側でCOMポートとAndroid端末のMACアドレスを紐づけることができればいけるのかなと考えましたが、可能なものなのでしょうか?
PC側のソースコードを掲載させていただきます。
考えられる方法があればご教授よろしくお願いします。
該当のソースコード
FTP
1Imports System.IO 2Imports System.Text 3Public Class FTP 4 5 6 Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load 7 8 ' シリアルポートのオープン 9 SerialPort1.PortName = "COM3" 10 11 ' シリアルポートの通信速度指定 12 SerialPort1.BaudRate = 9600 13 ' シリアルポートのパリティ指定 14 SerialPort1.Parity = IO.Ports.Parity.None 15 ' シリアルポートのビット数指定 16 SerialPort1.DataBits = 8 17 ' シリアルポートのストップビット指定 18 SerialPort1.StopBits = IO.Ports.StopBits.One 19 20 Button1.FlatStyle = FlatStyle.Flat 21 Button2.FlatStyle = FlatStyle.Popup 22 Button3.FlatStyle = FlatStyle.Standard 23 Button4.FlatStyle = FlatStyle.System 24 25 26 End Sub 27 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 28 '接続ボタン 29 30 Try 31 If SerialPort2.IsOpen = True Then 'ポートはオープン済み 32 MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 33 Exit Sub 34 End If 35 36 SerialPort2.Open() 'ポートオープン 37 38 Catch ex As Exception 39 '例外処理 40 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 41 End Try 42 43 End Sub 44 45 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 46 '終了ボタン 47 '接続切断 48 If SerialPort1.IsOpen = True Then 'ポートオープン済み 49 50 SerialPort1.Close() 'ポートクローズ 51 52 End If 53 54 MessageBox.Show("接続が切断されました。") 55 56 End Sub 57 58 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 59 60 61 '送信ボタン 62 63 If SerialPort1.IsOpen = True Then 'ポートはオープン済み 64 MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 65 Exit Sub 66 End If 67 68 SerialPort1.Open() 'ポートオープン 69 70 'JSONファイルの送信 71 72 Dim sr As New StreamReader("C:\temp\SampleData.json", Encoding.GetEncoding("UTF-8")) 73 74 Dim text As String = sr.ReadToEnd() 75 sr.Close() 76 77 Dim sr1 As New StreamReader("C:\temp\sample1.json", Encoding.GetEncoding("UTF-8")) 78 Dim text1 As String = sr1.ReadToEnd() 79 80 sr1.Close() 81 82 '送信するテキストがない場合、データ送信は行わない. 83 If String.IsNullOrEmpty(text) Then 84 85 SerialPort1.Close() 86 Return 87 88 End If 89 90 'シリアルポートからテキストを送信する. 91 Try 92 93 SerialPort1.Encoding = Encoding.GetEncoding(65001) 94 SerialPort1.Write(text) 95 SerialPort1.Close() 96 End 97 98 Catch ex As InvalidOperationException 99 100 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 101 102 End Try 103 104 End Sub 105 106 Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 107 '受信ボタン 108 109 'バイト配列 110 Dim bytRead As Byte() = New Byte(255) {} 111 112 'TCP受信(バッファ領域まで) 113 Dim intBytes As Integer 114 115 Try 116 117 intBytes = SerialPort1.Read(bytRead, 0, bytRead.Count) 118 119 Catch ex As InvalidOperationException 120 121 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 122 123 End Try 124 125 126 'TCP受信(バッファ領域まで) 127 ' Dim intBytes As Integer = SerialPort1.Read(bytRead, 0, bytRead.Count) 128 129 If intBytes = 0 Then 130 Close() 131 End If 132 133 '受信したデータを文字列に変換 134 Dim enc As Encoding = Encoding.GetEncoding("UTF-8") 135 Dim resMsg As String = enc.GetString(bytRead, 0, intBytes) 136 137 '末尾の\rを削除 138 resMsg = resMsg.TrimEnd(ControlChars.Cr) 139 140 Dim sw As New System.IO.StreamWriter("C:\temp\test.txt", False, System.Text.Encoding.GetEncoding("SHIFT-JIS")) 141 sw.WriteLine(resMsg) 142 sw.Close() 143 144 End Sub 145 146End Class
補足情報(FW/ツールのバージョンなど)
VisualStudio 2019 VB.Net