多客户,现在我已经看过这个教程 http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html 本教程为您提供了多个客户端可以连接到,当他们连接到他们被告知该服务器的服务器随着一个敲门工作,现在我明白如何传输数据,什么不是,但线程是如何工作的?服务器通过螺纹
我正在一个网络pong游戏中,服务器将持有这些职位并将它们传递给客户端,现在我有一个客户端连接到服务器,并且球位置传递给客户端,工作正常,有点跳动,但我确定一个带有.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();
我得到这个错误“无法转换无效主题” 如果任何人都可以照我的问题有些光这将是巨大的。
帆布
更新
我现在有自己的线程类
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;
and do th是当它是听
while(listen)
{
PongPlayerThread player1 = new PongPlayerThread(serverSocket.accept(), 0).start();
}
它给了我这个错误“无法从空转变为PongPlayerThread”如何解决这一行?
确定这里还有另一个问题,当一个客户端连接第一个客户端需要能够控制屏幕右侧的蝙蝠时,第二个客户端需要控制屏幕的左侧蝙蝠,我怎么知道哪个客户端是哪一个? 此外,你给我的线说KKMultiServerThread不能解析为变量 – Canvas 2013-02-12 17:56:53
你可以创建特定的线程实例像player1(左)和player2(右),并更改服务器只接受两个连接,然后再停止监听。然后玩家的代码有一个简单的标志,告诉它它应该是哪一边。 – 2013-02-12 17:59:33
我会怎么做呢? – Canvas 2013-02-12 18:01:10