私は、クライアントまたはサーバーとして動作するオールインワンのJavaチャットプログラムを作成しています。私は現在、接続が確立された後に、プログラムが正常に受信した(または送信する)この問題を抱えています。私は迷惑メールのロードを介して迷惑メールにループを使用して、私はもう一方のメッセージがいくつかのメッセージを受け取ることに気づいた。手動で送信するメッセージは一度もありません。ここで コードです:いないすべてのメッセージが送信されている理由をJavaチャットアプリケーションで送信されたメッセージのみを受信します
public class ConnectionThread implements Runnable {
private Connection c = Connection.getInstance();
private ChatInterface chatInterface;
private static ConnectionThread serverThread;
private ServerSocket serverSocket;
private Socket socket;
private ObjectInputStream dataIn;
private ObjectOutputStream dataOut;
public ConnectionThread() {}
public static synchronized ConnectionThread getInstance() {
if (serverThread == null) {
serverThread = new ConnectionThread();
}
return serverThread;
}
public void run() {
// If the programs role is server, set up the server
if (c.getRole() == ConnectionRole.SERVER) {
try {
setupServer();
waitForConnection();
setupStreams();
} catch (IOException e) {
e.printStackTrace();
}
do {
try {
chatInterface.addToChatHistory(dataIn.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
} while (c.getRole() == ConnectionRole.SERVER);
}
// If the programs role is client, set up a connection to the server
if (c.getRole() == ConnectionRole.CLIENT) {
try {
setupClient();
setupStreams();
} catch (IOException e) {
e.printStackTrace();
}
do {
try {
chatInterface.addToChatHistory(dataIn.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
} while (c.getRole() == ConnectionRole.CLIENT);
}
}
private void setupClient() throws IOException {
System.out.println("ATTEMPTING TO CONNECT...");
socket = new Socket("127.0.0.1", 8080);
System.out.println("CONNECTED!");
}
private void setupServer() throws IOException {
System.out.println("SETTING UP SERVER..");
serverSocket = new ServerSocket(8080, 1);
System.out.println("SERVER SETUP");
}
private void waitForConnection() throws IOException {
System.out.println("WAITING FOR A CONNECTION...");
socket = serverSocket.accept();
System.out.println("CONNECTION RECIEVED");
}
private void setupStreams() throws IOException {
System.out.println("SETTING UP STREAMS...");
dataOut = new ObjectOutputStream(socket.getOutputStream());
dataIn = new ObjectInputStream(socket.getInputStream());
chatInterface = ChatInterface.getInstance();
System.out.println("STREAMS SETUP");
}
public void sendMessage(String message) throws IOException {
System.out.println("SENDING MESSAGE...");
dataOut.writeUTF(message);
chatInterface.addToChatHistory(message);
System.out.println("MESSAGE SENT!");
}
}
誰が教えてもらえます/きちんと拾いましたか?私はかなり長い間それを試してきましたが、私は理由を理解できません。
どこにメッセージを送信しますか。 – 3kings
このコードは、送信したすべてを受信します。何かが受け取られなければ、あなたはそれを送らなかった。 'readUTF()'が 'EOFException'をスローするときは読み込みを止め、' ObjectInput/OutputStreams'は 'DataInput/OutputStreams'で十分です。 – EJP
メッセージは、下部のsendMessageメソッドを使用して送信されます。このメソッドは、ユーザーがインターフェイスの[送信]ボタンをクリックすると、別のクラスによって呼び出されます。 – user3278983