2016-04-28 23 views
0

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

Это код сервера

import java.net.*; 
import java.io.*; 
public class DateServer{ 

    public static void main(String[] args) { 
     try { 
       ServerSocket sock = new ServerSocket(6013); 
       // now listen for connections 
       while (true) { 
      Socket client = sock.accept(); 
      PrintWriter pout = new 
      PrintWriter(client.getOutputStream(), true); 
      // write the Date to the socket 
      pout.println(new java.util.Date().toString()); 
      // close the socket and resume 
      // listening for connections 
      client.close(); 
      } 
     } 
     catch (IOException ioe) { 
      System.err.println(ioe); 
     } 
    } 
} 

Это код клиента

import java.net.*; 
import java.io.*; 
public class DateClient{ 

    public static void main(String[] args) { 
     try { 
       //make connection to server socket 
       Socket sock = new Socket("127.0.0.1",6013); 
       InputStream in = sock.getInputStream(); 
       BufferedReader bin = new 
       BufferedReader(new InputStreamReader(in)); 
       // read the date from the socket 
       String line; 
       while ((line = bin.readLine()) != null) 
        System.out.println(line); 
       // close the socket connection 
       sock.close(); 
      } 
     catch (IOException ioe) { 
      System.err.println(ioe); 
     } 
    } 
} 

Так мое понимание сервер создает сокет и запись значения даты к нему. Затем клиент идет длинным и подключается к серверу и записывает значение в этом сокете. Я правильно интерпретирую этот код? Это мой первый опыт работы с сокетами.

Теперь для моего вопроса. Я хочу, чтобы клиент подключился к серверу (и распечатал сообщение о том, что вы подключены), а затем сможет отправить значение на сервер, чтобы сервер мог его обработать. Как мне это сделать? Я попытался возиться с DataOutputStream и DataInputStream, но я никогда не использовал их раньше. Любая помощь была бы высоко оценена.

+2

Так много примеров на этом сайте. Посмотрите, в частности, на шквал недавних вопросов о клиентах чата. – KevinO

ответ

0

Вы верны. У вас есть сервер, записывающий в сокет и клиент, читающий из сокета. Вы хотите отменить это.

сервер должен выглядеть следующим образом:

ServerSocket sock = new ServerSocket(6013); 
// now listen for connections 
while (true) 
{ 
    Socket client = sock.accept(); 

    InputStream in = client.getInputStream(); 
    BufferedReader bin = new BufferedReader(new InputStreamReader(in)); 
    // read the date from the client socket 
    String line; 
    while ((line = bin.readLine()) != null) 
     System.out.println(line); 

    // close the socket connection 
    client.close(); 
} 

Клиент должен выглядеть следующим образом:

try 
{ 
    // make connection to server socket 
    Socket sock = new Socket("127.0.0.1", 6013); 
    PrintWriter out = new PrintWriter(sock.getOutputStream(), true); 

    // send a date to the server 
    out.println("1985"); 
    sock.close(); 
} 
catch (IOException ioe) 
{ 
    System.err.println(ioe); 
} 
+0

Хорошо, что обнадеживает, что я правильно понял и благодарю вас! Похоже, когда я запускаю сервер, а затем клиент ничего не печатает в stdout. Я буду отлаживать и посмотреть, смогу ли я понять, почему это так. – Xuluu

+0

hmmm Я не уверен, почему, но кажется, что код никогда не нажимает на оператор while. Когда я запускаю клиент, он выполняет и закрывает сокет без каких-либо заявлений печати. – Xuluu

+0

С кодом, который у меня есть в примере, это должен быть только сервер, который печатает на консоли. –

Смежные вопросы