Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передать сообщение не строку по сокетам, покажите примерчик, пожалуйста 
:(
    Опции темы
марина
Дата 12.8.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



 Я хочу создать класс, допустим Message в нем будут несколько полей.(строки, цифры, еще классы)
Как мне его передать и получить по тсп сокетам?
везде примеры только для строк
это класс
Код

public class Message implements IMessage {
   public int gamesituation;//0- проиграл или сдался , 1 - все по прежнему, игра идет
   public Panel panel; //состояние вражеской панельки
}

это открытые входящие и выходящие потоки с сокета
Код

outgoing = new PrintWriter(connection.getOutputStream());
incomming = new InputStreamReader(connection.getInputStream());


PM MAIL   Вверх
powerOn
Дата 12.8.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Класс который нужно передать должен быть сериализуемым, например:

Код

import java.io.Serializable;

public class TestClass implements Serializable {
    private int i = 0;
    private String str = "";
    
    /** Creates a new instance of TestClass */
    public TestClass() {
    }

    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;
    }
}


Код простого Сервера для приема TestClass:
Код

import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public Server() {
    }
    public static void main(String[] args) {
        try {
            int port = 1234;
            ServerSocket srv = new ServerSocket(port);
            
            // Wait for connection from client.
            Socket socket = srv.accept();
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            
            TestClass testClass = (TestClass) ois.readObject();
            System.out.println("i = " + testClass.getI());
            System.out.println("str = " + testClass.getStr());
            ois.close();
        } catch (Exception e) {
        }
    }
}


Код простого клиента, который объект TestClass отправлет серверу:
Код

import java.io.ObjectOutputStream;
import java.net.Socket;

public class Client {
    public Client() {
    }
    public static void main(String[] args) {
        
        try {
            // Create socket
            Socket sock = new Socket("localhost", 1234);
            ObjectOutputStream ous = new ObjectOutputStream(sock.getOutputStream());
            
            TestClass testClass = new TestClass();
            testClass.setI(123);
            testClass.setStr("hello");
            
            ous.writeObject(testClass);
            ous.flush();
            sock.close();
        } catch (Exception e) {
        } 
    }
}




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
марина
Дата 12.8.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



 А если я пишу игру, и хочу посылать ходы, то мне надо выделить отдельный поток для сети?
как это сделать?можно пример
PM MAIL   Вверх
LSD
Дата 12.8.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(марина @  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();
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.