gpt4 book ai didi

java - 为什么在 java 中带有监听端口的 TCP/IP 服务器不工作

转载 作者:可可西里 更新时间:2023-11-01 02:56:46 26 4
gpt4 key购买 nike

我已经用 java 编写了一个代码,将我的计算机与一个发射器连接起来,一个发射器设备,一个通信板已经实现并准备好通过 TCP/IP 连接到具有特定地址 IP(比如 192.168.2.2)的任何服务器,并且监听一个特定的端口号(比如 4000)。

我遵循了如何用 Java 创建服务器端应用程序并提供该监听端口的确切步骤,以便我可以连接到该发射器。我不明白为什么当我尝试调试代码时,它会阻塞 clientSocket = serverSocket.accept() 行,并引发超时异常。

有人可以帮我找出我的代码中可能存在错误的地方吗?任何帮助将不胜感激。谢谢。

代码如下:

public class Server {

public static void main(String[] args) {
// TODO Auto-generated method stub


//Declares server and client socket, as well as the input and the output stream
ServerSocket serverSocket = null;
Socket clientSocket = null;
PrintWriter out;
//BufferedReader in;
BufferedReader in;


try{

InetAddress addr = InetAddress.getByName("192.168.2.2");

//Opens a server socket on port 4000
serverSocket = new ServerSocket(4000) ;

//Sets the timeout
serverSocket.setSoTimeout(30000);

System.out.println("Server has connected");

//Create a connection to server
System.out.println("Server listening connection from client ....");

//Listens and waits for client's connection to the server
clientSocket = serverSocket.accept();

// Creates input and output streams to socket
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

//Reads response from socket
while((in.readLine())!= null ){
System.out.println ( in.readLine() );
}

System.out.println ( "Closing connection ....");

//Terminates connection
clientSocket.close();
serverSocket.close();

System.out.println("Connecton successfully closed");
}
catch(IOException e){
System.out.println(e);
}
}
}

最佳答案

Could someone help me find out where the error might be in my code?

您的代码中没有可能导致此问题的错误。很明显,您没有正确配置设备以连接到此服务器,或者设备没有运行,或者没有连接,或者存在防火墙。对此进行调查。

但是:

InetAddress addr = InetAddress.getByName("192.168.2.2");

这是干什么用的?它未被使用。

System.out.println("Server has connected"); 

这根本不是真的。服务器尚未连接。此时它所做的只是创建一个监听套接字。

while((in.readLine())!= null  ){

在这里,您正在阅读一行并将其丢弃。

    System.out.println ( in.readLine() );

在这里,您每第二 行打印一次,并丢弃了所有奇数行。这个循环的正确写法是:

String line;
while ((line = in.readLine()) != null)
{
System.out.println(line);
}

另请注意,此服务器只会为一个客户端提供服务,然后退出。从 accept()clientSocket.close() 的一切都应该有一个循环,如果有多个设备,它应该为每个接受的套接字启动一个新线程来处理输入/输出。

关于java - 为什么在 java 中带有监听端口的 TCP/IP 服务器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947039/

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