TCP, p2p, w LibGdx
Ostatnio zmodyfikowano 2014-09-23 19:43
anonim Temat założony przez niniejszego użytkownika |
TCP, p2p, w LibGdx » 2014-09-23 19:43:39 Cześć Piszę ostatnio grę w javie (libgdx). Łączy się ona przez HTTP z serwerem na cba.pl i pobiera z niego listę zalogowanych użytkowników (login, IP, ranking). Następnie poprzez Select Box'a możemy wybrać przeciwnika. Od tej pory wszelka komunikacja powinna iść przez TCP. W klasie TCPManager mam dwa ważne elementy: serwer nasłuchujący na porcie PORT i funkcję sendMessage(message, ip), która wysyła na ten sam port wiadomość message do komputera o adresie IP ip. Niestety działa to tylko jeżeli ip="127.0.0.1" (localhost i włączony webserv). Nie działa natomiast w przypadku IP z którym mój komputer jest widoczny w sieci xx.xx.xxx.xx(tak ma docelowo działać, żeby łączyć się z innymi urządzeniami). Podaję kod: public class TCPManager { MyGdxGame game; WebAccountManager account; int PORT = 2338; String enemyLogin=""; String enemyIP=""; int enemyELO=0; TCPManager (MyGdxGame g, WebAccountManager a){ game = g; account = a; new Thread(new Runnable(){ @Override public void run() { ServerSocketHints serverSocketHint = new ServerSocketHints(); serverSocketHint.acceptTimeout = 0; ServerSocket serverSocket = Gdx.net.newServerSocket(Protocol.TCP, PORT, serverSocketHint);
while(true){ Socket socket = serverSocket.accept(null);
BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try { String msg = buffer.readLine(); Gdx.app.log("msg", msg); Gdx.app.log("msg", Integer.toString(msg.length())); } catch (IOException e) { e.printStackTrace(); } } } }).start(); } public void sendMessage(String str, String IP){ // When the button is clicked, get the message text or create a default string value String textToSend = new String(); if(str.length() == 0) textToSend = "Doesn't say much but likes clicking buttons\n"; else textToSend = str + ("\n"); // Brute for a newline so readline gets a line SocketHints socketHints = new SocketHints(); // Socket will time our in 4 seconds socketHints.connectTimeout = 0; //create the socket and connect to the server entered in the text box ( x.x.x.x format ) on port _PORT Socket socket = Gdx.net.newClientSocket(Protocol.TCP, IP, PORT, socketHints); try { // write our entered message to the stream socket.getOutputStream().write(textToSend.getBytes()); } catch (IOException e) { e.printStackTrace(); } } public void setPlayer(int idx){ Gdx.app.log("setPlayer", "start"); enemyLogin = game.account.onlinePlayers.get(idx).login; enemyIP = game.account.onlinePlayers.get(idx).IP; enemyELO = game.account.onlinePlayers.get(idx).ELO; Gdx.app.log(enemyLogin, enemyIP); } }
Oraz error którym kończy się aplikacja po wywołaniu funkcji sendMessage z IP != "127.0.0.1": Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Error making a socket connection to xx.xx.xxx.xx:2338 at com.badlogic.gdx.net.NetJavaSocketImpl.<init>(NetJavaSocketImpl.java:51) at com.badlogic.gdx.backends.lwjgl.LwjglNet.newClientSocket(LwjglNet.java:56) at com.asd.hardcoremaze.TCPManager.sendMessage(TCPManager.java:62) at com.asd.hardcoremaze.GuiManager$20.clicked(GuiManager.java:545) at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89) at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:57) at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:272) at com.badlogic.gdx.InputMultiplexer.touchUp(InputMultiplexer.java:94) at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:305) at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:199) at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.badlogic.gdx.net.NetJavaSocketImpl.<init>(NetJavaSocketImpl.java:46) ... 10 more
|
|
« 1 » |