アンドロイドアプリとWindows C++ winsockがTCPソケットを使用して通信し、アンドロイドからC++サーバーに文字列を送信しましたが、C++サーバーからAndroidクライアントに文字列を送信できません。ここでC++ winsockからTCPソケット経由でAndroidに文字列を送信するにはどうすればよいですか?
は重要なC++サーバーの一部です:
recvbuf = "Back At u \0";
cout << " \n " << recvbuf << "\n";
int iResult= send(ClientSocket, recvbuf, (int) strlen(recvbuf), 0);
if (iResult == SOCKET_ERROR) {
wprintf(L"send failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
printf("Bytes Sent: %d\n", iResult);
そしてここでは、一部が供給アンドロイドクライアントです:
class TextRcv extends AsyncTask<Void, Void, String>
{
@Override
protected String doInBackground(Void... params) {
//TO SEND A STRING
Socket clientSocket = null;
try {
clientSocket= new Socket("192.168.1.5",8889);
DataOutputStream oos= new DataOutputStream(clientSocket.getOutputStream());
oos.writeBytes(String.valueOf(mystr.length()));
oos.flush();
byte[] bufferout=mystr.getBytes();
oos.write(bufferout, 0, bufferout.length);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
//to recieve a string
String input =null;
char[] buffin=new char[128];
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
in.read(buffin, 0, 128);
input=String.valueOf(buffin);
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
return input;
}
@Override
protected void onPostExecute(String input) {
super.onPostExecute(input);
Toast toast=Toast.makeText(getApplicationContext(),input,Toast.LENGTH_LONG);
toast.show();
}
}
C++出力がそこにはエラーがなく、11バイト(長さということを述べていますrecvbuff文字列の)が送信されます。しかし、アンドロイドでは、 'input'文字列は常にnullです。
Start Receving
length of string recieved in bytes =14
AndroidID - Hello World...
Done
Back At u
Bytes Sent: 11
Press any key to continue . . .
Androidの出力はどこですか?それがヌルであることをどうやって知っていますか注意: 'read()'によって返された長さを無視し、バッファをいっぱいにすると仮定します。これを行うことは指定されていません。なぜ同じことを二度送っているのですか? – EJP
@EJP私はトーストがキャラクターなしで表示されるので、アンドロイドの出力がヌルであることを知っています。また、私はif(input == null)チェックをして、それは本当だった。 –
@ EJP同じことを2回送信することで何を意味するのか分かりません。それを詳しく教えてください。ありがとう –