ソケット(TCP)ごとにサーバーと通信するAndorid Appを実装しました。 Androidアプリでボタンをクリックすると、アプリとサーバー側の間で通信が確立されているだけでなく、メッセージが交換されています。 もう一度サーバーと通信するには、Eclipseでサーバーをもう一度実行する必要があります。私は一度サーバー側を実行したいと思います。クライアントのソケットバッファにデータがない場合、Androidユーザーが新しい要求を に送信するとサーバーは再びリッスンする必要があります。私はRunnable
クラスを使用してそれを管理しようとしましたが、再びEclipseのサーバー側ですか?どうすればそれを稼働させることができますか?クライアントにリッスンするServerSocketを維持する
public class Server{
public static void main(String args[]) throws Exception {
Cg2AapiServer.startServer();
}
private static void startServer() {
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(27015);
Socket clientSocket = serverSocket.accept();
Cg2AapiServer.bufferedInputStream = new BufferedInputStream(clientSocket.getInputStream());
Cg2AapiServer.outputStream = clientSocket.getOutputStream();
Cg2AapiServer.smartCard = new SmartCard();
Cg2AapiServer.handleConnection();
Cg2AapiServer.bufferedInputStream.close();
Cg2AapiServer.outputStream.close();
clientSocket.close();
} catch (IOException e) {
System.err.println("Unable to process client request");
e.printStackTrace();
}
}
};
Thread serverThread = new Thread(serverTask);
serverThread.start();
System.out.println("At the end of the startServer method!");
}
private static void handleConnection() throws IOException {
ByteBuffer receiveBuffer = ByteBuffer.allocate(Cg2AapiServer.RECEIVE_BUFFER_LENGTH);
int readBytes = 0;
while (true) {
readBytes = Cg2AapiServer.bufferedInputStream.read(receiveBuffer.array(), receiveBuffer.position(),
receiveBuffer.remaining());
System.out.println("readBytes: " + readBytes);
if (readBytes < 0) {
// What should I do here when the readBytes = -1
Cg2AapiServer.startServer(); //With this line I am getting the error below.
break;
}
}
}
エラー
クライアント要求java.net.BindExceptionを処理できません:使用中のすでに住所 : のjavaで java.net.DualStackPlainSocketImpl.bind0(ネイティブメソッド)でJVM_Bind .Net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376) at java.net.PlainSocketImpl.bind(PlainSoc (ServerSocket.java:190)を java.net.ServerSocket.bind(ServerSocket.java:376) java.net.ServerSocket(ServerSocket.java:237) java.net.ServerSocket(ServerSocket.java: 128) Cg2AapiServer $ 1.runで( java.lang.Thread.run(Thread.java:745)
住所:JVM_Bind。古いサーバーを停止してから実行する必要があります。このエラーは、選択したポート番号で既にリッスンしているものがあることを意味します。 – Sneh