我有一個類使用類TCPServer
的遊戲。我想分開在TCPServer
所有低級別的發送和接收。所以我給TCPServer
一個獨立的線程,不斷讀取傳入的消息。我想將這些消息返回到Game
。但我不知道如何做到這一點。 Game
也應該通過向客戶端發送消息來響應這些消息。如何將消息的發送和接收移動到服務器線程?
我想/知道這是可能的移動線程從TCPServer
Game
但這是解決這個問題的最好方法嗎?把兩個班級分開是不是更好?
我有以下僞代碼。
public class Game{
TCPServer tcpServer = new TCPServer();
public void execute(){
// do something
Object o = new Object;
send(o);
if(receive(o)){ // WRONG
// do something with the receive object
}
}
private void send(Object o){
tcpServer.send(o);
}
private Object receive(Object o){
return tcpServer.receive(o);
}
public class TCPServer extends Thread{
private ServerSocket serverSocket;
Socket client = new Socket;
public void run(){
Object o = receive();
// How do I get this object o in the Server class in function execute()?
}
private Object receive(){
return serverSocket.listen();
}
public void send(Object o){
client.send(o);
}
回答你的問題標題 - 你需要在遊戲邏輯和網絡邏輯之間共享數據容器。基本上,'Queue'的一些子類型。但是由於當前代碼中存在很多缺點,我建議從閱讀有關網絡編程的Java教程開始 - http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html –
,是的,你是對的:將遊戲邏輯與網絡相關的東西分開是一個非常好的主意。 –