Вот пример сервера и клиента
Сервер:
| Код | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;
/** * Класс - сервер, принимает запросы от клиентов и отдает данные */ public class BufferedThreadedSocketServer {
public static void main(String args[]) throws Exception { // Определяем номер порта, который будет "слушать" сервер int cTosPortNumber = 1777;
// Пишем, что стартовали сервер System.out.println("Client is started");
// Открыть серверный сокет (ServerSocket) // Это специальный класс для сетевого взаимодействия с серверной стороны ServerSocket servSocket = new ServerSocket(cTosPortNumber);
while(true) { System.out.println("Waiting for a connection on " + cTosPortNumber); // Получаем данные от клиента - они приходят к нам в виде обхекта класса Socket // accept - метод, который ожидает прихода запросов на порт Socket fromClientSocket = servSocket.accept(); // Стартуем новй поток для клиента new SocketThread(fromClientSocket).start(); } } } class SocketThread extends Thread {
Socket fromClientSocket;
public SocketThread(Socket fromClientSocket) { this.fromClientSocket = fromClientSocket; }
@Override public void run() { // Создать поток для записи симовлов в сокет PrintWriter pw = null; try { String str; pw = new PrintWriter(fromClientSocket.getOutputStream(), true); // Создать поток для чтения символов из сокета // Для этого надо открыть поток сокета - socket1.getInputStream() // Потом перобразовать его в поток символов - new InputStreamReader // И уже потом сделать его читателем строк - BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(fromClientSocket.getInputStream())); // Читаем сообщения от клиента до тех пор пока он не скажет "bye" или окончит связь while ((str = br.readLine()) != null) { // Печатаем сообщение System.out.println("The message: " + str); // Сравниваем с "bye" и если что - выходим из цикла if (str.equals("bye")) { // Тоже говорим клиенту "bye" pw.println("bye"); // Выходим из цикла break; } else { str = "Server returns " + str; pw.println(str); } } pw.close(); br.close(); fromClientSocket.close(); } catch (IOException ex) { ex.printStackTrace(); } finally { pw.close(); } } }
|
Клиент:
| Код | import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket;
/** * Класс - клиент для получения данных из сокета */ public class BufferedSocketClient {
public static void main(String args[]) throws Exception { // Определяем номер порта, на котором нас ожидает сервер для ответа int portNumber = 1777; // Подготавливаем строку для запроса String str = "Тестовая строка для передачи";
// Пишем, что стартовали клиент System.out.println("Client is started");
// Открыть сокет (Socket) для обращения к локальному компьютеру (InetAddress.getLocalHost()) // Это специальный класс для сетевого взаимодействия c клиентской стороны Socket socket1 = new Socket(InetAddress.getLocalHost(), portNumber);
// Создать поток для чтения символов из сокета // Для этого надо открыть поток сокета - socket1.getInputStream() // Потом перобразовать его в поток символов - new InputStreamReader // И уже потом сделать его читателем строк - BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
// Создать поток для записи симовлов в сокет PrintWriter pw = new PrintWriter(socket1.getOutputStream(), true);
// Мечатаем строку в сокет pw.println(str);
// Читаем, что нам ответили из сокета while ((str = br.readLine()) != null) { // Отправляем тестовую строку System.out.println(str); // И потом посылаем ему "bye" для окончания "разговора" pw.println("bye");
if (str.equals("bye")) { break; } }
br.close(); pw.close(); socket1.close(); } }
|
|