我尝试了一切,但似乎没有任何工作 . 我正在失去理智,如果有人能提供帮助那就太棒了 . 我正在写一个简单的客户端/服务器代码,其中我有echoclient.class给出了,我想在服务器上运行,我在localhost上写 . echoClient类发送消息,我想要反转字符串并将其发回 . 我继续拒绝使用echo客户端类连接,但是当我运行echo服务器时它工作正常 . 任何帮助???
这是我的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.ServerSocket;
public class EchoServer {
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(args[1]);
String hostid = args[0];
ServerSocket echoServer = new ServerSocket(port);
System.out.println("Success");
try{
Socket echoClient = new Socket(hostid, port);
echoClient = echoServer.accept();
System.out.println("Connection made");
// while(true){
while ((echoServer.isClosed() != true) ||
(echoClient.isClosed() != true)) {
BufferedReader reader = new BufferedReader(new
InputStreamReader(echoClient.getInputStream()));
String message = reader.readLine();
PrintWriter writer = new
PrintWriter(echoClient.getOutputStream(), true);
while(message.contains("#") != true || message.contains("$")
!= true){
String builder = new
StringBuilder(message).reverse().toString();
writer.println(builder + "\n");
}//writer.close();
System.out.println(message + "\n");
writer.close();
echoServer.close();
echoClient.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
}
这是结果:
java -cp . EchoClient 127.0.0.1 1234
Exception in thread "main" java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at EchoClient.main(EchoClient.java:22)
and when i run this:
java -cp . EchoServer 127.0.0.1 1234
Success
Connection made
2 回答
'拒绝连接'只是意味着没有任何东西正在侦听您尝试连接的IP:端口 . 可能是您在服务器之前启动了客户端 .
isClosed()
测试毫无意义 . 它们仅在关闭关联的套接字时返回true . 他们没有告诉你关于连接状态的任何信息 .是胡说八道 . 初始化你要在下一行中分配的变量充其量只是浪费时间,可能是无意义错误的来源 . 在这种情况下,您既有套接字泄漏又有自连接 . 这些不解释'连接被拒绝',但是自连接会阻止客户端在连接成功后工作,因为您没有为每个连接启动新线程 .
我认为您的代码存在一些问题 . 首先,看起来您的服务器和客户端属于同一个类 . 我认为它们应该是分开的;你应该有一个echoServer.java和一个echoClient.java . 接下来,假设您已完成此操作并仅显示echoServer,请在'try'之后的行中创建一个带有hostid和port的新echoClient . 你不需要这样做,下一行负责,它应该读取Socket echoClient = echoServer.accept();此外,我认为你的声明是错误的 .
你应该看看http://introcs.cs.princeton.edu/java/84network/EchoServer.java.html和http://introcs.cs.princeton.edu/java/84network/EchoClient.java.html
ron shenk