私はJavaが初めてで、いくつかの問題を理解しようとしています..
ID を指定して、サーバーからクライアントにメッセージを送信できるようにしたいと考えています。私はそれについて考え、接続するクライアントごとに PrintWriter を作成して PrintWriter 配列に入れると良いと思いましたが、これはうまくいかないようです。
メソッド名のいくつかは私の母国語で書かれていますが、それは問題ではありません。
package homeControl;
import java.net.*;
import java.util.Scanner;
import java.io.*;
import java.awt.*;
public class Server {
String sporocilo = null;
int id = 0;
ServerHandler handler = new ServerHandler();
public void sprejmiPovezavo() {
try {
ServerSocket svrSock = new ServerSocket(5000);
Socket klientSocket = svrSock.accept();
new Thread(new ServerHandler(klientSocket));
} catch(IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
Server svr = new Server();
svr.sprejmiPovezavo();
}
}
サーバー ハンドラ コード:
package homeControl;
import java.net.*;
import java.io.*;
import java.awt.*;
public class ServerHandler implements Runnable {
Socket klientSocket;
static int userCounter = 0;
static int selectedId = 0;
BufferedReader reader;
PrintWriter writer;
PrintWriter[] writerHolder = new PrintWriter[10];
outputHelper out = new outputHelper();
public ServerHandler(Socket klientSocket) throws IOException {
userCounter++;
this.klientSocket = klientSocket;
writer = new PrintWriter(this.klientSocket.getOutputStream());
writerHolder[userCounter] = writer;
InputStreamReader inReader = new InputStreamReader(this.klientSocket.getInputStream());
reader = new BufferedReader(inReader);
out.frameOutput(this.klientSocket.getInetAddress().toString(), "Server sprejel povezavo:");
selectedId = userCounter;
posljiSporocilo("wassup");
}
public ServerHandler() {
// Do not launch the main Constructor
}
public void run(){
String inMessage = null;
try{
while((inMessage = reader.readLine()) != null) {
System.out.println("Server Sprejel: " + inMessage);
}
} catch(IOException ex){
ex.printStackTrace();
}
}
public void selectId(int id){
selectedId = id;
}
public void posljiSporocilo(String sporocilo){
writerHolder[selectedId].println(sporocilo + "\n");
writerHolder[selectedId].flush();
}
}