Помогите с первой сетевой программой - PullRequest
3 голосов
/ 01 августа 2010

Вот код.

public class testClient {
public static void main(String[] args) {
    testClient abc = new testClient();
    abc.go();
}
public void go() {
    try {
        Socket s = new Socket("127.0.0.1",  5000);
        InputStreamReader  sr = new InputStreamReader(s.getInputStream());
        BufferedReader reader = new BufferedReader(sr);
        String x = reader.readLine();
        System.out.println(x);
        reader.close();
    } catch(IOException ex) {
        ex.printStackTrace();
    }
  }
}

public class testServer {
public static void main(String[] args) {
    testServer server = new testServer();
    server.go();
}
public void go() {
    try {
        ServerSocket s = new ServerSocket(5000);
        while(true) {
            Socket sock = s.accept();

            PrintWriter writer = new PrintWriter(sock.getOutputStream());
            String toReturn = "No cake for you.";
            writer.println(toReturn);
        }
    } catch(IOException ex) {
        ex.printStackTrace();
    }
  }
}

java.io.* и java.net.* импортированы в оба класса.

Теперь, когда я пытаюсь запустить их (используя разные терминалы), ничегослучается.Что я делаю не так?

Экран: http://i29.tinypic.com/250qlmt.jpg

Ответы [ 4 ]

5 голосов
/ 01 августа 2010

При использовании PrintWriter вам необходимо вызвать метод очистки.Изменил код на следующий, и он работает:).

public class testServer {
public static void main(String[] args) {
    testServer server = new testServer();
    server.go();
}
public void go() {
    try {
        ServerSocket s = new ServerSocket(5000);
        while(true) {
            Socket sock = s.accept();

            PrintWriter writer = new PrintWriter(sock.getOutputStream());
            String toReturn = "No cake for you.";
            writer.println(toReturn);
            writer.flush();
        }
    } catch(IOException ex) {
        ex.printStackTrace();
    }
  }
}
5 голосов
/ 01 августа 2010

Ваш вывод, по-видимому, буферизирован. После записи вашего вывода попробуйте промыть:

        writer.println(toReturn);
        writer.flush();

Кроме того, вы можете рассмотреть возможность вызова sock.close() на вашем сервере, если вы закончили с сокетом, иначе клиенту будет интересно, что делать дальше.

1 голос
/ 01 августа 2010

Закройте писателя.

1 голос
/ 01 августа 2010

Проверьте этот простой рабочий пример.

 import java.net.*;
    import java.io.*;
    public class Server {
        Server() throws IOException {
            ServerSocket server = new ServerSocket( 4711 );
            while ( true ) {
              Socket client = server.accept();
              InputStream in = client.getInputStream();
              OutputStream out = client.getOutputStream();
              int multiplikator1 = in.read();
              int multiplikator2 = in.read();
              int resultat = multiplikator1 * multiplikator2;
              out.write(resultat);
       }
       public static void main (String[] args) {
       try {
        Server server = new Server();
       } catch (IOException e) {
          e.printStackTrace();
       }
    }
}

    import java.net.*;
    import java.io.*;
    public class Client {
        Client() throws IOException {
            Socket server = new Socket ( "localhost", 4711 );
            InputStream in = server.getInputStream();
            OutputStream out = server.getOutputStream();
            out.write( 4 );
            out.write( 9 );
            int result = in.read();
            System.out.println( result );
            server.close();
        }
        public static void main (String[] args) {
           try {
           Client client = new Client();
         } catch (IOException e) {
           e.printStackTrace();
        }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...