0
このプログラムを実行すると、Clientクラスはユーザーにコマンドを入力するように要求し、そのコマンドはServerクラスに移動してファイルを開き、そのファイルの各行を読み取り、バイト長表示されるClientクラスに戻ります。JAVA TCPクライアント - サーバー接続
残念ながら、コマンドを入力すると、何も起こりません。&理由がわかりません。
TCPクライアントクラス
package TcpClient;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.io.*;
public class TcpClient {
public static void main(String[] args) {
String temp;
String displayBytes;
try {
//create input stream
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
//create client socket, connect to server
Socket clientSocket = new Socket("localhost",5555);
//create output stream attached to socket
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
System.out.print("Command : ");
//create input stream attached to socket
BufferedReader inFromServer =
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
temp = inFromUser.readLine();
//send line to server
outToServer.writeBytes(temp);
//read line from server
//displayBytes = inFromServer.readLine();
while((displayBytes = inFromServer.readLine()) != null) {
System.out.print(displayBytes);
}
//clientSocket.close();
}
catch(Exception ex) {
}
}
}
TCPサーバ・クラス
package TcpServer;
import java.io.BufferedReader;
import java.io.*;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) {
// The name of the file to open.
String fileName = "input.txt";
// This will reference one line at a time
String line = null;
String holder=null;
String clientWord;
int bytNumber;
try {
//create welcoming socket at port 5555
ServerSocket welcomeSocket = new ServerSocket(5555);
//wait, on welcoming socket for contact by client
Socket connectionSocket = welcomeSocket.accept();
//create input stream, attached to socket
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
//create output stream, attached to socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
//read in line from socket
clientWord = inFromClient.readLine();
if(clientWord.equals("query")) {
try {
// FileReader reads text files in the default encoding.
FileReader fileReader = new FileReader(fileName);
// Always wrap FileReader in BufferedReader.
BufferedReader buffer = new BufferedReader(fileReader);
while((line = buffer.readLine()) != null) {
System.out.println(line);
bytNumber = line.getBytes().length;
holder=Integer.toString(bytNumber);
//pr.println(bytNumber);//only printing first line not going until eof
outToClient.writeBytes(holder);
// line = buffer.readLine();
// pr.flush();
}
// Always close files.
buffer.close();
}
catch(FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
}
catch(IOException ex) {
System.out.println ("Error reading file '" + fileName + "'");
// Or we could just do this:
// ex.printStackTrace();
}
}// end if statement
}
catch(Exception ex) {
}
}
}
あなたのクライアントクラスで** **無視しない例外をすることによって開始します。あなたはエラーメッセージを無視して、デバッグの正確な方法を無視しています... – GhostCat
私が得る唯一のメッセージは、clientSocketを閉じるための警告ですが、私はそれを行ったときにも同じ出力を得ます。 – n00bie1221
ここではソケットを正しく閉じない、接続上の問題など、さまざまな問題があります。ヒント:デバッガで動作させてみてください。何が起きているかを確認するためにprintステートメントを追加します。まず最初に、クライアント/サーバー通信の全プロセスをガイドするステップバイステップのチュートリアル(http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.htmlなど)を読んでください。 – GhostCat