Androidデバイスで単純なServerSocketアプリケーションを作成しました.telnetを使用して接続しましたが、正常に動作します(送信されたメッセージはlogcatウィンドウに表示されます)。問題は、php ページから接続しようとするときです (PHP ソケットも使用しています)。Android ソケットは最初の接続を受け入れ、それから何かがおかしい - PHP から送信されたメッセージを読んで logcat に表示することもあるが、通常は最初のリクエストと trhen しか受け入れない... 何もない
アンドロイド側コード:
public class TestSocketActivity extends Activity {
private ServerSocket ss;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setSocket();
}
public void setSocket() {
try {
ss = new ServerSocket(7000);
System.out.println("Started");
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Accept failed: 4444");
e.printStackTrace();
}
Socket clientSocket = null;
try {
clientSocket = ss.accept();
String s = clientSocket.getRemoteSocketAddress().toString();
System.out.println(s);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("SS error");
e.printStackTrace();
}
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
Toast.makeText(getApplicationContext(),"test",1).show();
System.out.println("in: "+inputLine);
}
ss.close();
setSocket();
}
catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("error");
e.printStackTrace();
}
}
}
これは単純な PHP リクエストです。
<?php
error_reporting(E_ALL);
$address = '192.168.0.180';
$port = 7000;
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_connect($socket, $address, $port);
$in = mktime();
socket_write($socket, $in, strlen($in));
socket_close($socket);
?>
... それだけです。おそらく、より簡単な通信がいくつかあります (PHP が Android からの要求を待つことができないように、必要なたびに PHP から Android デバイスに接続する必要があります)。
手伝ってくれてありがとう。