gpt4 book ai didi

java - 使用线程池的客户端/服务器连接?

转载 作者:行者123 更新时间:2023-12-02 07:31:22 25 4
gpt4 key购买 nike

我正在编写一个使用线程池的客户端/服务器应用程序,以便多个客户端可以同时与服务器通信并向其发送命令:

但即使使用极其简单的客户端,它也不起作用:

这是我的客户:

    if(args.length==0) {
host="127.0.0.1";
port=11111;
} else {
host=args[0];
String portString = args[1];
try {
port = Integer.parseInt(portString);
} catch(Exception e) {
e.printStackTrace();
port = 11111;
}
}

try {
System.out.println("Client connects to host=" + host + " port=" + port);
Socket skt = new Socket(host, port);//line 30 in the exception
BufferedReader myInput = new BufferedReader(new InputStreamReader(skt.getInputStream()));
PrintWriter myOutput = new PrintWriter(skt.getOutputStream(), true);

myOutput.println("Hello I am the Client!");
String buf=myInput.readLine();
System.out.println(buf + "=buf");


if(buf!=null) {
System.out.println("Client receives " + buf + " from the Server!");
buf=myInput.readLine();
System.out.println(buf);

}
myOutput.close();
myInput.close();
skt.close();

但我得到:

Client connects to host=127.0.0.1 port=11111 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.(Unknown Source) at java.net.Socket.(Unknown Source) at client.Client.main(Client.java:30)//look at the comment at the code

所以我认为我的服务器可能是错误的,因为我在客户端中看不到它:

ServerMain.java

public static void main(String[] args) {

try {
clientlistener = new ClientListener(server);
//serversocket = new ServerSocket();
} catch (IOException e) {
System.out.println("Could not listen on tcpPort: " + tcpPort);
e.printStackTrace();
System.exit(-1);
}
}

这里我用一个新的客户端监听器打开

private static Server server = new Server();

并且想要将其添加到 serverSocket 和 threadPool 中:

public ClientListener(Server server) throws ServerException{
this.server=server;

try {
serverSocket = new ServerSocket(server.getTcpPort());
} catch (IOException e) {
throw new ServerException(e.getMessage());
}

System.out.println(String.format("Accepting new clients " +
"on %s", serverSocket.getLocalSocketAddress()));
}

/**
* Spawns new threads on incoming connection requests from clients.
* */
@Override
public void run() {
while(true){
try {
ClientCommunicator cc = new ClientCommunicator(serverSocket.accept(), pool);
threadPool.execute(cc);
clientComms.add(cc);
} catch (SocketException e) {
System.out.println(e.getMessage());
return;
} catch (IOException e) {
System.out.println(e.getMessage());
return;
}
}
}

ClientCommunicator 只是一个从命令行读取的类。

我的问题是:

我的套接字连接出了什么问题?

我要打开一个并从客户那里接受它?

非常感谢您的回答!!!

最佳答案

我认为您的服务器已关闭,这就是您收到连接被拒绝的原因。我没有看到您的 server.accept() 调用使服务器套接字等待新客户端的到来并返回 Socket 对象而不是 SocketServer。

我已经为你完成了这段代码。我希望它有帮助。

package com.sockets.exam1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerCode {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(11111);
while (true) {
new ThreadSocket(server.accept());
}
} catch (Exception e) {
}
}
}
class ThreadSocket extends Thread{
private Socket insocket;
ThreadSocket(Socket insocket){
this.insocket = insocket;
this.start();
}
@Override
public void run() {
try {
System.out.println("procesing request");
BufferedReader in = new BufferedReader(new InputStreamReader(
insocket.getInputStream()));
PrintWriter out = new PrintWriter(insocket.getOutputStream(),
true);
String instring = in.readLine();
out.println("The server got this: " + instring.toUpperCase());
insocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

关于java - 使用线程池的客户端/服务器连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com