Цитата(марина @ 12.8.2006, 20:02 ) | | А если я пишу игру, и хочу посылать ходы, то мне надо выделить отдельный поток для сети? |
На сервере, да. На клиенте, можно обойтись и основным потоком игрушки, но лучше выделить отдельный поток.
| Код | public class TestClass implements Serializable { private int i = 0; private String str = "";
public int getI() { return i; }
public void setI(int i) { this.i = i; }
public String getStr() { return str; }
public void setStr(String str) { this.str = str; } } |
| Код | public class NetThread extends Thread { private Socket socket;
public NetThread(Socket socket) { this.socket = socket; }
@Override public void run() { try { ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); while(true) { TestClass testClass = (TestClass) ois.readObject(); System.out.println("i = " + testClass.getI()); System.out.println("str = " + testClass.getStr()); } } catch(Exception e) { e.printStackTrace(); } } } |
| Код | public class Server extends Thread { private int port;
public Server(int port) { this.port = port; }
public void run() { try { ServerSocket srv = new ServerSocket(port);
while(true) { Socket socket = srv.accept(); new NetThread(socket).start(); } } catch(Exception e) { e.printStackTrace(); } }
public static void main(String[] args) { new Server(1234).start(); } } |
| Код | public class Client { public static void main(String[] args) { try { Socket sock = new Socket("localhost", 1234); ObjectOutputStream ous = new ObjectOutputStream(sock.getOutputStream());
for(int i = 0; i < 10; i++) { TestClass testClass = new TestClass(); testClass.setI(123 * i); testClass.setStr("Hello!"); ous.writeObject(testClass); ous.flush(); Thread.sleep(1000); } sock.close(); } catch(Exception e) { e.printStackTrace(); } } } |
|