サーバーが受け入れたのと同じ接続を使用してクライアントがデータを送信するのは正しい方法ですか?
状況はこのようなものです。私の PC で実行されているブルートゥース サーバーがあり、反対側にはクライアントとサーバーを備えた Android フォンがあります。Android側から、クライアントは接続を開始します。私はアンドロイドサンプルからブルートゥースチャットの例を使用しています。
そして、Androidのサーバークライアントは次のようになります
BluetoothSocket socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
PC 側では、Bluezライブラリを使用してサーバーとクライアントを実装しています。
コードには、ブルートゥースの受信スレッドとメイン スレッドが含まれています。サーバーが Android フォンからの接続を受け入れるときはいつでも、ソケット値をグローバル変数に割り当てるだけで、クライアントが同じソケットを使用して送信するデータを送信する必要があるときはいつでも、
サーバ:-
int GLOBAL_CLIENT;
void* recive_bluetooth_trd(void*)
{
...............................
..............................
client = accept(s, (struct sockaddr *)&rem_addr, &opt);
GLOBAL_CLIENT=client;
while(1){
bytes_read = read(client, buf, sizeof(buf));
....................
...................
}
クライアント:-
void clinet(char *msg, int length){
........................
int bytes_write=write(GLOBAL_CLIENT,message, length);
..........................
}
私の質問は、それは正しい方法ですか? 問題は、クライアントが PC からデータを正常に送信しても、Android 側で受信できない場合があることです。