Simples cliente Java IRC

votos
1

Eu estou tentando escrever um cliente de IRC que é muito simples, com a esperança de mais tarde expandindo-o.

Neste ponto eu tenho duas classes escrito em Java que são supostamente para trabalhar em conjunto e foram copiados do tutorial Oracle. O que estou tentando fazer é ter o EchoClient conectar a um host em uma determinada porta para que o host executando EchoServer pode imprimir o que os tipos de clientes. Eu estou tentando fazer exatamente o que o tutorial diz que ele faz, mas eu estou recebendo um erro depois de copiar e colar o código.

EchoClient.java:

import java.io.*;
import java.net.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {
    if (args.length != 2) {
        System.err.println(
            Usage: java EchoClient <host name> <port number>);
        System.exit(1);
    }

    String hostName = args[0];
    int portNumber = Integer.parseInt(args[1]);

    try (
        Socket echoSocket = new Socket(hostName, portNumber);
        PrintWriter out =
            new PrintWriter(echoSocket.getOutputStream(), true);
        BufferedReader in =
            new BufferedReader(
                new InputStreamReader(echoSocket.getInputStream()));
        BufferedReader stdIn =
            new BufferedReader(
                new InputStreamReader(System.in))
    ) {
        String userInput;
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println(echo:  + in.readLine());
        }
    } catch (UnknownHostException e) {
        System.err.println(Don't know about host  + hostName);
        System.exit(1);
    } catch (IOException e) {
        System.err.println(Couldn't get I/O for the connection to  +
            hostName);
        System.exit(1);
    }
}

}

EchoServer.java:

import java.net.*;
import java.io.*;

public class EchoServer {
  public static void main(String[] args) throws IOException {

    if (args.length != 1) {
        System.err.println(Usage: java EchoServer <port number>);
        System.exit(1);
    }

    int portNumber = Integer.parseInt(args[0]);

    try (
        ServerSocket serverSocket =
            new ServerSocket(Integer.parseInt(args[0]));
        Socket clientSocket = serverSocket.accept();
        PrintWriter out =
            new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));
    ) {
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            out.println(inputLine);
        }
    } catch (IOException e) {
        System.out.println(Exception caught when trying to listen on port 
            + portNumber +  or listening for a connection);
        System.out.println(e.getMessage());
    }
}

}

Quando tento executar o EchoServer compilado a partir de meu terminal com java EchoServer 2000eu recebo o erro, Error: Could not find or load main class EchoCliente eu recebo o mesmo erro dejava EchoServer 2000

Publicado 20/10/2018 em 13:59
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

O exemplo de servidor de eco mostra como fazer isso. Primeiro configurar um fluxo de algum tipo de saída, usando o socket que o cliente cria:

Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
    new PrintWriter(echoSocket.getOutputStream(), true);

Então, quando você tem uma mensagem para enviar, escreva o resultado para o outobjeto com println().

String userInput;
while ((userInput = stdIn.readLine()) != null) {
    out.println(userInput);
    //... 
}

Você pode encontrar estas linhas na listagem de código na página de tutorial: https://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html

Esta não é a única maneira de escrever a uma tomada, mas isso é como o exemplo faz isso e você provavelmente deve ficar com isso por enquanto.

Respondeu 20/10/2018 em 16:06
fonte usuário

votos
0

Se você estiver executando o aplicativo a partir da linha de comando - tente primeira abertura cmd.execomo administrador .

Tipo no Windows start menu: cmd , Em seguida, clique direito em cmd.exe e escolha " Executar como Administrador ".

Em seguida, no prompt de comando que abre executar

java knockclient 127.0.0.1 80 test

como faria normalmente.

Respondeu 20/10/2018 em 14:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more