我遇到了一些问题。现在我看了这个教程:http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html。这个教程提供了一个服务器,多个客户端可以连接到该服务器,当他们连接到服务器时,会被告知参与knock knock游戏。现在我理解如何传输数据等等,但线程是如何工作的呢?
我正在制作一个网络乒乓球游戏,其中服务器将保存位置并将其传递给客户端。我已经连接了一个客户端到服务器,并且球的位置传递给了客户端,它工作得很好,有点抖动,但我相信使用.sleep的线程将会有所帮助。但不管怎样,我的问题是,如何使我的客户端成为线程?以及如何存储它们?
例如,这里是Knock Knock服务器MultiThread类。
现在看服务器,它将在每个连接上创建一个新的KKMultiServerThread,但是如何存储它们呢?我可以制作一个KKMultiServerThread数组吗? 我试图制作一个KKMultiServerThread数组, 当我尝试这行代码时:
我遇到了这个错误:"无法将void转换为Thread",如果有人能解决我的问题就好了。
画布
更新
我现在有了自己的线程类。
它给我这个错误:“无法将void转换为PongPlayerThread”,我该如何解决?
我正在制作一个网络乒乓球游戏,其中服务器将保存位置并将其传递给客户端。我已经连接了一个客户端到服务器,并且球的位置传递给了客户端,它工作得很好,有点抖动,但我相信使用.sleep的线程将会有所帮助。但不管怎样,我的问题是,如何使我的客户端成为线程?以及如何存储它们?
例如,这里是Knock Knock服务器MultiThread类。
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转换为Thread",如果有人能解决我的问题就好了。
画布
更新
我现在有了自己的线程类。
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是一个字符串,包含了所有信息。假如我在我的乒乓球服务器顶部声明一个player1:
private static PongPlayerThread player1;
当它正在侦听时,执行此行。
while(listen)
{
PongPlayerThread player1 = new PongPlayerThread(serverSocket.accept(), 0).start();
}
它给我这个错误:“无法将void转换为PongPlayerThread”,我该如何解决?