我一直在努力嘗試在Java中進行服務器編程,並且我想創建一個簡單的控制檯服務器交互。Java套接字/服務器編程:套接字未連接
我遇到的問題是,每當服務器運行時,它總是崩潰,主要錯誤是套接字異常。
下面是代碼:
SOK_CLIENT類別:
import java.io.*;
import java.net.*;
public class SOK_CLIENT
{
public static void main(String[] args) throws Exception
{
SOK_SERVER SERVER = new SOK_SERVER();
SOK_CLIENT CLIENT = new SOK_CLIENT();
CLIENT.run();
}
public void run() throws Exception
{
Socket SOCK = new Socket("localhost", 1025);
PrintStream PS = new PrintStream(SOCK.getOutputStream());
PS.println("Hello to Server From Client");
InputStreamReader IR = new InputStreamReader(SOCK.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String MESSAGE = BR.readLine();
System.out.println(MESSAGE);
}
}
這裏是SOK_SERVER類:(其中,誤差是位於)
import java.io.*;
import java.net.*;
public class SOK_SERVER
{
public SOK_SERVER()
{
try
{
run();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run() throws Exception
{
int PORT = 1025;
ServerSocket SRVSOCKET = new ServerSocket(PORT);
Socket SOCK = new Socket();
System.out.println("Server Starting at Port: " + PORT);
InputStreamReader IR = new InputStreamReader(SOCK.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String MESSAGE = BR.readLine();
System.out.println(MESSAGE);
if(MESSAGE != null)
{
PrintStream PS = new PrintStream(SOCK.getOutputStream());
PS.println("Message Recieved");
}
}
}
例外:
java.net.SocketException: Socket is not connected
at java.net.Socket.getInputStream(Socket.java:796)
at SOK_SERVER.run(SOK_SERVER.java:31)
at SOK_SERVER.<init>(SOK_SERVER.java:16)
at SOK_CLIENT.main(SOK_CLIENT.java:8)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.dynamicjava.symbol.JavaClass$JavaMethod.evaluate(JavaClass.java:362)
at edu.rice.cs.dynamicjava.interpreter.ExpressionEvaluator.handleMethodCall(ExpressionEvaluator.java:92)
at edu.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(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695
提示:你要我們花時間來幫助你,所以請使用*預覽*功能,確保所有** **你的代碼是正確的格式/縮進。並請閱讀關於Java編碼風格指南。你用於你的類和變量的名字會讓我的大腦受傷。認真地說:就像你寫代碼的方式一樣,它的讀取難度要比它應該高10倍。含義:它需要我們10倍的能量來幫助你。 – GhostCat
對不起!這是我第一次嘗試在單線上做整個支架!我試着修復它在未來 –
很高興聽到這個;但只是爲了記錄:命名與格式化的可讀性同等重要。它實際上更重要,因爲糟糕的格式化可以通過工具機械地修復。不好的名字......好吧,那總是需要**手動**工作。 – GhostCat