Java でコーディングされた基本的なサーバーとクライアントがあります。これは私がインターネットで見たコードで、私のニーズに合わせて少し修正しました。さて、私は基本的にクライアントからサーバーにメッセージを送信しています。このメッセージは「こんにちは」です。サーバーはポート 6789 で「hello」という単語を含むメッセージをチェックし、それが正しい場合は、特定のディレクトリ内のすべてのファイル/サブディレクトリの名前を取得する必要があります。これらの名前の最初の名前がクライアントに送り返され、クライアントはそれを印刷します。ポート 6789 を開き、クライアントからサーバーへのメッセージの送信は完全に機能します。サーバーはそれを受け取り、必要なアクションを実行しますが、データをクライアントに送り返しません。クライアントが受信していないのか、サーバーが送信していないのかわかりません。両方のコードは次のとおりです。
クライアント
String sentence = "hello";
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
outToServer.writeBytes(sentence + '\n');
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
System.out.println(inFromServer.readLine());
clientSocket.close();
サーバ
String sentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while (true) {
Socket connSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connSocket.getInputStream()));
sentence = inFromClient.readLine();
if (sentence.contains("hello")) {
File dir = new File("D:/ServerMap/");
String[] children = dir.list();
if (children == null) {
JOptionPane.showMessageDialog(frame,
"Either no directory or it doesn't exist");
} else {
DataOutputStream outToClient = new DataOutputStream(
connSocket.getOutputStream());
outToClient.writeBytes(children[0]);
JOptionPane.showMessageDialog(frame, children[0]);
}
}
}
個別にエクスポートされた Runnable Jar ファイルを使用してサーバーを実行しています。クライアントはコンパイルされ、Eclipse で実行されます。
私の問題を明確にするために:クライアントはサーバーに「hello」を送信します->サーバーはメッセージを受信し、「hello」が含まれているため、ifステートメントはtrueを返します->サーバーは指定されたディレクトリ内のファイル名をチェックし、カップルを見つけます->サーバーは送信します見つかった最初のファイル名を返します->クライアントはそのファイル名を受け取り、Eclipseコンソールに出力することになっています(これは機能しない部分です)
助言がありますか?
PS: これはすべてローカル ホストで行われます。Windows 7 x64の1台のコンピューターで実行され、ポート6789が開いています(手動で開く前はまったく機能しませんでした)。