質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

受付中

Android PC シリアル接続 COMポートとMACアドレスの紐づけ

dowble
dowble

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

2回答

0評価

0クリップ

1423閲覧

投稿2020/08/07 02:53

編集2022/01/12 10:55

前提・実現したいこと

PC-Android間でシリアル接続を用いてファイルを送受信するプログラムを作っています。
サーバPCは1台、クライアントAndroid端末は複数台、オフライン環境での使用を想定しています。

現在、PC側でシリアルポートのオープン、Android側でPCのMACアドレスを指定して通信・ファイル送受信ができています。

今の実装方法だと、すべてのAndroid端末にファイルが送られてくることになるので、
特定のAndroid端末にだけファイルを送信するといった感じに修正したいのですが、全く方法が分かりません。
PC側でCOMポートとAndroid端末のMACアドレスを紐づけることができればいけるのかなと考えましたが、可能なものなのでしょうか?

PC側のソースコードを掲載させていただきます。
考えられる方法があればご教授よろしくお願いします。

該当のソースコード

FTP

Imports System.IO Imports System.Text Public Class FTP Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' シリアルポートのオープン SerialPort1.PortName = "COM3" ' シリアルポートの通信速度指定 SerialPort1.BaudRate = 9600 ' シリアルポートのパリティ指定 SerialPort1.Parity = IO.Ports.Parity.None ' シリアルポートのビット数指定 SerialPort1.DataBits = 8 ' シリアルポートのストップビット指定 SerialPort1.StopBits = IO.Ports.StopBits.One Button1.FlatStyle = FlatStyle.Flat Button2.FlatStyle = FlatStyle.Popup Button3.FlatStyle = FlatStyle.Standard Button4.FlatStyle = FlatStyle.System End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '接続ボタン Try If SerialPort2.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort2.Open() 'ポートオープン Catch ex As Exception '例外処理 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '終了ボタン '接続切断 If SerialPort1.IsOpen = True Then 'ポートオープン済み SerialPort1.Close() 'ポートクローズ End If MessageBox.Show("接続が切断されました。") End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '送信ボタン If SerialPort1.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort1.Open() 'ポートオープン 'JSONファイルの送信 Dim sr As New StreamReader("C:\temp\SampleData.json", Encoding.GetEncoding("UTF-8")) Dim text As String = sr.ReadToEnd() sr.Close() Dim sr1 As New StreamReader("C:\temp\sample1.json", Encoding.GetEncoding("UTF-8")) Dim text1 As String = sr1.ReadToEnd() sr1.Close() '送信するテキストがない場合、データ送信は行わない. If String.IsNullOrEmpty(text) Then SerialPort1.Close() Return End If 'シリアルポートからテキストを送信する. Try SerialPort1.Encoding = Encoding.GetEncoding(65001) SerialPort1.Write(text) SerialPort1.Close() End Catch ex As InvalidOperationException MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click '受信ボタン 'バイト配列 Dim bytRead As Byte() = New Byte(255) {} 'TCP受信(バッファ領域まで) Dim intBytes As Integer Try intBytes = SerialPort1.Read(bytRead, 0, bytRead.Count) Catch ex As InvalidOperationException MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try 'TCP受信(バッファ領域まで) ' Dim intBytes As Integer = SerialPort1.Read(bytRead, 0, bytRead.Count) If intBytes = 0 Then Close() End If '受信したデータを文字列に変換 Dim enc As Encoding = Encoding.GetEncoding("UTF-8") Dim resMsg As String = enc.GetString(bytRead, 0, intBytes) '末尾の\rを削除 resMsg = resMsg.TrimEnd(ControlChars.Cr) Dim sw As New System.IO.StreamWriter("C:\temp\test.txt", False, System.Text.Encoding.GetEncoding("SHIFT-JIS")) sw.WriteLine(resMsg) sw.Close() End Sub End Class

補足情報(FW/ツールのバージョンなど)

VisualStudio 2019 VB.Net

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

dodox86
dodox86

2020/08/07 03:16

話が唐突で少々意味不明です。PC側がシリアルポート接続、Android側ではPCのMACアドレスを指定する、ということはBluetoothでのシリアル通信でしょうか。
dowble
dowble

2020/08/07 03:27

はい、Bluetoothでのシリアル通信です。 情報が足りず申し訳ありません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。