少し問題があります。このチュートリアルを見てきました 。http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html このチュートリアルでは、複数のクライアントが接続できるサーバーを提供します。サーバーに接続すると、ノックノックジョブを実行するように指示されます。データを転送する方法と転送しない方法を理解しましたが、スレッドはどのように機能しますか?
私はサーバーが位置を保持してクライアントに渡すネットワーク化されたポンゲームに取り組んでいます、今私はサーバーに接続されたクライアントを持っていて、ボールの位置はクライアントに渡され、うまく機能し、少しびくびくしますが私は.sleepのあるスレッドが役立つと確信しています。とにかく私の質問は、どうすればクライアントをスレッドにすることができるかということです。どうすればそれらを保存できますか?
たとえば、ここにノックノックサーバーのマルチスレッドクラスがあります
package knockKnockServer;
import java.net.*;
import java.io.*;
public class KKMultiServerThread extends Thread {
private Socket socket = null;
public KKMultiServerThread(Socket socket) {
super("KKMultiServerThread");
this.socket = socket;
}
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
String inputLine, outputLine;
KnockKnockProtocol kkp = new KnockKnockProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye"))
break;
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
そして、ここのサーバーには
package knockKnockServer;
import java.net.*;
import java.io.*;
public class MultiKKServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening)
new KKMultiServerThread(serverSocket.accept()).start();
serverSocket.close();
}
}
サーバーを見ると、接続ごとに新しいKKMultiServerThreadが作成されますが、どうすればそれらを保存できますか?KKMultiServerThreadの配列を作成できますか?KKMultiServerThreadの配列を作成しようとしましたが、この行を試してみると
multi[0] = new KKMultiServerThread(serverSocket.accept()).start();
「voidをスレッドに変換できません」というエラーが表示されます。誰かが私の問題に光を当てることができれば、それは素晴らしいことです。
キャンバス
アップデート
私は今、自分のスレッドクラスを持っています
package Pong;
import java.net.*;
import java.io.*;
public class PongPlayerThread extends Thread
{
private Socket socket = null;
private String pongData = "";
public PongPlayerThread(Socket socket, int id)
{
super("PongPlayerThread");
this.socket = socket;
}
public void passData(String data)
{
pongData = data;
}
public void run()
{
try
{
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
while(true)
{
out.println(pongData);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
pongDataは、すべての情報を文字列にまとめた文字列です。これで、pongサーバーの上部でplayer1を宣言すると、次のようになります。
private static PongPlayerThread player1;
聞いているときにこの行を実行します
while(listen)
{
PongPlayerThread player1 = new PongPlayerThread(serverSocket.accept(), 0).start();
}
「voidからPongPlayerThreadに変換できません」というエラーが表示されます。これを修正するにはどうすればよいですか?