// Порождаем нить для взаимодействия с

// клиентом, создавшим запрос на соединение.

ServerAgent agent = new ServerAgent(clientConn);

Thread thread = new Thread (agent);

} catch (lOException ioe)

(System.out.printlnfioe.getMessage!));

ioe.printStackTrace(); break;

)

}

}

}

Листинг 8.7. Агент сервера является объектом, который взаимодействует с клиентом независимо от демона сервера. Он запускает свою собственную нить, позволяя другим экземплярам одновременно взаимодействовать со своими клиентами

import javax.microedition. io._StreamConnectior.;

/**

Данный класс определяет компоненту, которую сервер создает для взаимодействия с клиентом.

Он действует как «агент» от имени сервера для того, чтобы сервер был свободен для прослушивания только новых запросов соединения.

Экземпляры данного класса являются частью сервера.

*/

public class ServerAgent implements Runnable

private StreamConnection conn;

/**

Конструктор.

@param с Объект соединения, который представляет

соединение с клиентом. Класс ServerSocket создает и пересылает

его в данный конструктор.

*/

public ServerAgent(StreamConnection c)

super (); conn = с;

}

/**

Выполняется агент данного сервера. Начинается диалог с клиентом. Этот метод должен быть вызван явно после того, как создан данный объект.

public void run()

}

// Взаимодействует с клиентом. Реализует поведение,

// которое определяет данную службу.

}

}

Листинг 8.8. Клиент имеет отдельно соединение с агентом сервера. Модель состояния взаимодействий, а также синтаксис и семантика взаимодействий определяются сервером, но клиенты должны им подчиняться

import javax.microedition.midlet.MI Diet;

import javax.microedition.io.StreamConnection;

import javax.microedition.io.Connector;

import Java.io.lOException;

/**

Данный класс реализует клиента, который соединяется с сервером.

Для создания экземпляра данного класса вы должны указать сервер (имя сервера DNS) и известный порт службы, с которой вы хотите установить соединение.

*/

public class ClientSocket implements Runnable

{

public static final String P.ROTOCOL = «socket»;

// Порт известного сокета сервера, private String serverPort;

// Имя сервера, с которым соединяемся, private String serverHostName;

// URI известного серверного сокета. private String serverURI;

// Соединение с. сервером.

private StreamConnection streamConn;

protected ClientSocket()

}

super();

}

/**

Открытый конструктор. Вы должны указать имя сервера DNS и номер порта службы. @param server — имя DNS машины, с которой вы хотите соединиться.

@param port — Номер порта сервера, с которым вы хотите соединиться.

*/

public ClientSocket(String server, String port)

throws TOException

(

this();serverHostName = server; serverPort = port;

serverURI = buildServerURI (); open ();

}

/**

Конструктор.

@param uri — полностью сформированный URI службы, запрос на соединение с которой вы хотите создать.

@сбрасывает InvalidArgumentException при несформированном URI.

*/

public ClientSocket(String uri) throws lOException

{

this (); serverURI = uri;

}

Открывает соединение. После того как создан данный объект, соединение с сервером еще не открыто. Вы должны открыть его явно.

Это делает модель использования более гибкой для клиентов.

@ сбрасывает lOException, если соединение не может быть открыто по некоторым причинам.

*/

public void open() throws lOException

streamConn = (StreamConnection) Connector.open(serverURI);

/**

Закрывает соединение с сервером.

*/

public void closed try streamConn. closed; }

catch (lOException ioe)

}

ioe.printStackTraced;


Логин
Пароль
Запомнить меня