Producer
과 Consumer
이 각각 동일한 소켓을 사용하여 서버와 통신하도록하려면 어떻게해야합니까? 아니면 다른 클래스가 소켓 연결을 처리해야합니까? 생산자와 소비자는 이고은 고객은입니다.생산자와 소비자간에 단일 소켓을 공유하려면 어떻게합니까?
소켓 연결은 마치 Producer
과 Consumer
에 묶여있는 것처럼 보입니다. 외관상으로는 풀리지 않을 수 없으므로 세 번째 클래스에 연결하고 싶습니다. 어떻게 보이지 않습니다. 그렇게하려면.
난 아주 많이 Producer
및 Consumer
의 패턴처럼 만 나는 서버와의 모든 소켓 통신은 단일 소켓을 통해 들어가도록 클라이언트 코드의 제약 이내에 implment하는 방법을 모르겠어요.
고유 한 식별자를 보내고 가져 오는 것이 가능하지만 서버가 지나치게 복잡해질 수 있습니다.
코드 :
package net.bounceme.dur.client;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.concurrent.BlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.bounceme.dur.data.State;
import net.bounceme.dur.data.Title;
public class Producer implements Runnable {
private final BlockingQueue<Title> queue;
private final String server = "localhost";
private final int portNumber = 8080;
public Producer(BlockingQueue<Title> q) {
this.queue = q;
}
private Title connect() throws IOException, ClassNotFoundException {
Socket socket = new Socket(server, portNumber);
Title title = null;
State state = State.undefined;
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
title = (Title) objectInputStream.readObject();
return title;
}
@Override
public void run() {
try {
connect();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);
//exit?
}
}
}
소비자 :
패키지 net.bounceme.dur.client; 당신은 하나의 Socket
를 작성하고 InputStream
및 OutputStream
각 한 (된 사람이 읽고 어느 한 것은 쓰기에 따라 다름을 공유 할 필요가
http://www.journaldev.com/1034/java-blockingqueue-example-implementing-producer-consumer-problem
감사합니다. 그런 소켓을 통과하는 것이 가능하다는 것을 몰랐습니다. 오류가 발생한다고 생각했습니다. – Thufir