Отправка нескольких переменных через сокет? - PullRequest
1 голос
/ 24 декабря 2011

Я недавно начал изучать сети с сокетами в Java.Итак, я создал многопользовательскую игру, в которую можно играть на том же компьютере, но я хотел сделать ее сетевой многопользовательской, затем я узнал о сокетах, теперь я хочу отправить переменные позиции игрока в игре насервер, который затем может поместить этого игрока в эту позицию в другом игровом экземпляре, запущенном на другом компьютере.И дело в том, что я просто терплю неудачу, и все данные не получают и не читают.Я также хочу, чтобы позиция отправлялась и получалась постоянно, что также является проблемой для меня ...

Я пытался использовать ObjectOutputStream и ObjectInputStream для отправки массива int с переменными, но это также не удалось, поэтому не могли бы выПокажите мне, как это сделать, потому что я понятия не имею, и я не могу найти ответ в Интернете.

Thx

Ответы [ 2 ]

4 голосов
/ 24 декабря 2011

Как самое простое решение, используйте Object Streams для отправки созданного вами объекта, где вы храните эти координаты, но этот класс должен реализовывать интерфейс Serializable. Например, для 2D координат:

class Coords implements Serializable {
    int x, y;
    public Coords(int x, int y) {
        this.x = x;
        this.y = y;
    }       
}

...

// To write:
// oos = ObjectOutputStream of the socket
Coords tmp = new Coords(x, y);
oos.writeObject(tmp);
oos.flush();

...

//To read:
//ois = ObjectInputStream of the socket
Coords tmp = (Coords)ois.readObject();

http://java.sun.com/developer/technicalArticles/ALT/sockets/ также может помочь вам.

1 голос
/ 24 декабря 2011

попробуйте что-то вроде этого:

import java.io.*;
import java.net.*;
class Server extends Thread {
    Server() throws IOException {
        serverSocket = new ServerSocket(0);
    }
    public void run() {
        while (true) {
            try {
                Socket client = serverSocket.accept();
                Connect c = new Connect(client);
                c.start();
            } catch (Exception e) {}
        }
    }
    final ServerSocket serverSocket;
}
class Data implements Serializable {
    int[] data = { 1, 2, 3 };
}
class Connect extends Thread {
    public Connect(Socket clientSocket) {
        client = clientSocket;
        try {
            ois = new ObjectInputStream(client.getInputStream());
            oos = new ObjectOutputStream(client.getOutputStream());
        } catch (Exception e1) {
            try {
                client.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            return;
        }
    }
    public void run() {
        try {
            oos.writeObject(new Data());
            oos.flush();
            ois.close();
            oos.close();
            client.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println("done");
    }
    final Socket client;
    ObjectInputStream ois;
    ObjectOutputStream oos;
}
class Client {
    Client(int port) {
        this.port = port;
    }
    void connectAndRead() {
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        Socket socket = null;
        Data data = null;
        try {
            socket = new Socket("127.0.0.1", port);
            oos = new ObjectOutputStream(socket.getOutputStream());
            ois = new ObjectInputStream(socket.getInputStream());
            data = (Data) ois.readObject();
            oos.close();
            ois.close();
            for (int d : data.data)
                System.out.println(d);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    final int port;
}
public class Main {
    public static void main(String[] arguments) throws IOException, InterruptedException {
        Server server = new Server();
        server.start();
        Client client = new Client(server.serverSocket.getLocalPort());
        client.connectAndRead();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...