你可能想要的是一個多線程的服務器。 服務器每次接受連接時,服務器都會創建一個線程來處理髮送/接收到該客戶端。如果您在服務器中不使用線程,則它一次只能處理一個連接。 因此,當你meantioned,服務器infinitly循環和監聽進來的連接:
while(true){
serverSocket.accept();
ClientHandler c = new ClientHandler(serverSocket);
類ClientHandler中的一個實例將每一個連接被接受時創建的。這個類實現Runnable接口,並且循環對於插座上進來的使用的getInputStream和getOutputStream方法的消息:
public class ClientHandler implements Runnable{
DataInputStream in;
DataOutputStream out;
//ClientHandler constructor
public ClientHandler(Socket s) throws IOException{
in= new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
thread.start();
}
run方法:
public void run() {
while(true){
String temp="";
while ((temp = (String) in.readUTF()) != null){ // Read from the input stream each iteration. When temp is not null a message is recived
System.out.println(temp);
請上面的代碼並沒有考慮到不同的異常可能發生並且非常基本。但它應該給你一個關於如何使用套接字的服務器可以實現的基本想法。
是使用套接字的主要要求?有一些使用JMS服務器發送/接收消息的技術。 –
沒有要求,我只想知道創建自己的自定義服務器時有什麼選項。 – loyalflow
好吧,沒有提到的一個選項是使用像Apache ActiveMQ這樣的JMS服務器。你不需要管理任何套接字。您創建隊列和偵聽器,並且您的服務器等待消息處理。 –