2013-07-31 3 views
0

간단한 에코 프로그램을 실행하려고하지만 IOException을 계속 잡아 당기고 있는데 이유가 없습니다! 누구든지 내가 잘못 가고 있는지 알아? (BAHBAHBAH는 내 컴퓨터의 이름입니다). 에 Tarnis :간단한 에코 프로그램 오류

java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at EchoClient.main(EchoClient.java:12) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.dynamicjava.symbol.JavaClass$JavaMethod.evaluate(JavaClass.java:362) 
at    edu.rice.cs.dynamicjava.interpreter.ExpressionEvaluator.handleMethodCall(ExpressionEvaluator.java:92 ) 
at .rice.cs.dynamicjava.interpreter.ExpressionEvaluator.visit(ExpressionEvaluator.java:84) 
at koala.dynamicjava.tree.StaticMethodCall.acceptVisitor(StaticMethodCall.java:121) 
at edu.rice.cs.dynamicjava.interpreter.ExpressionEvaluator.value(ExpressionEvaluator.java:38) 
at edu.rice.cs.dynamicjava.interpreter.ExpressionEvaluator.value(ExpressionEvaluator.java:37) 
at edu.rice.cs.dynamicjava.interpreter.StatementEvaluator.visit(StatementEvaluator.java:106) 
at edu.rice.cs.dynamicjava.interpreter.StatementEvaluator.visit(StatementEvaluator.java:29) 
at koala.dynamicjava.tree.ExpressionStatement.acceptVisitor(ExpressionStatement.java:101) 
at edu.rice.cs.dynamicjava.interpreter.StatementEvaluator.evaluateSequence(StatementEvaluator.java:66) 
at edu.rice.cs.dynamicjava.interpreter.Interpreter.evaluate(Interpreter.java:77) 
at edu.rice.cs.dynamicjava.interpreter.Interpreter.interpret(Interpreter.java:47) 
at edu.rice.cs.drjava.model.repl.newjvm.InterpreterJVM.interpret(InterpreterJVM.java:246) 
at edu.rice.cs.drjava.model.repl.newjvm.InterpreterJVM.interpret(InterpreterJVM.java:220) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) 
at sun.rmi.transport.Transport$1.run(Unknown Source) 
at sun.rmi.transport.Transport$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Unknown Source) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

가와의 연결을위한 I/O를 가져올 수 없습니다 다음과 같이

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

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

    Socket echoSocket = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 

    try { 
     echoSocket = new Socket("BAHBAHBAH", 7); 
     out = new PrintWriter(echoSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(
            echoSocket.getInputStream())); 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host: taranis."); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for " 
          + "the connection to: taranis."); 
     System.exit(1); 
    } 

BufferedReader stdIn = new BufferedReader(
           new InputStreamReader(System.in)); 
String userInput; 

while ((userInput = stdIn.readLine()) != null) { 
out.println(userInput); 
System.out.println("echo: " + in.readLine()); 
} 

out.close(); 
in.close(); 
stdIn.close(); 
echoSocket.close(); 
} 
} 

스택 추적입니다.

+0

stacktrace를 게시 할 수 있습니까? – hexafraction

+0

1024 이상의 포트를 사용하고 보안 소프트웨어가 연결을 차단하지 않도록하십시오. – ServerMonkey

+0

@ServerMonkey 그러나 포트 7은 에코를위한 예약 된 포트입니다 ... – MadProgrammer

답변

1

서버 프로그램을 실행하고 동일한 포트에서 수신 대기해야합니다.

Socket serverEchoSocket; 
ServerSocket echoService; 

try { 
    echoService = new ServerSocket(7); 
    serverEchoSocket = echoService.accept(); 
} catch (IOException e) { 
    System.out.println(e); 
} 
+0

방화벽은 방화벽이 설정되어 있고 차단되지 않으면 여러 플랫폼에서 실행할 수있는 서비스는 아닙니다. . 서비스가 비활성화되거나 차단 된 가능성이 더 높습니다. – MadProgrammer

+0

이것은 서버 소켓에 대한 적절한 생성자가 아닙니다. – TheBlindSpring

+0

@ user2621169 스팟 메이트에 감사드립니다. 수정 됨. –

3

이 문에 대부분 문제가 있습니다 :

echoSocket = new Socket("BAHBAHBAH", 7); 

하는 연결하려는 호스트 이름과 포트가 올바른지 확인하십시오가. 둘 다 부정확하다. 0-1024 사이에 예비 포트가 있고 포트 7에서 어떤 서비스에 연결하려고하는지 확실하지 않습니다.

일부 서버가 포트 7과 호스트 이름 "BAHBAHBAH"에서 수신 대기하는지 확인하십시오. 당신은 명령을 사용하여 해당 호스트와 포트에 텔넷을 시도하여이를 확인할 수 있습니다

telnet BAHBAHBAH 7 

을가 오류를하지 않는 경우에, 그것은 그 호스트와 포트에서 수신 서비스가있는 것입니다.

+0

참고로, 기본적으로 텔넷 클라이언트는 Windows 7에서 사용할 수 없습니다. 좋은 팁, +1 –

+0

어디에서이 코드 라인을 입력할까요? – TheBlindSpring

+0

@ user2621169 코드를 권장하지 않습니다. 텔넷 명령은 명령 프롬프트에서 실행할 수 있습니다. 당신이 시도하고있는 기계와 항구에 다다를 수 있는지보십시오. –

1

입력 스트림을 받기 전에 소켓을 수신 대기 상태로 설정해야한다고 생각합니다. 연결을 수신하면 outputstream을 얻습니다.