gpt4 book ai didi

Java套接字编程——连接完成之前套接字超时

转载 作者:行者123 更新时间:2023-12-01 16:55:16 25 4
gpt4 key购买 nike

我有一个套接字编程代码......

Server Program

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

public class GreetingServer extends Thread
{
private static int port;
private ServerSocket serverSocket;

public GreetingServer(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(50000);
}

public void run()
{
while(true)
{
try
{
System.out.println("Waiting for client on port " +
serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to "
+ server.getRemoteSocketAddress());
DataInputStream in =
new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out =
new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to "
+ server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
port=9000;
try
{
Thread t = new GreetingServer(port);
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}

客户端代码是...

import java.io.*;
import java.net.*;
public class GreetingClient
{
private static String serverName;
public static void main(String [] args)
{
String sName = "MyServerName";
int port = 9000;
try
{
System.out.println("Connecting to " + sName
+ " on port " + port);
Socket client = new Socket(sName, port);
System.out.println("Just connected to "
+ client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out =
new DataOutputStream(outToServer);

out.writeUTF("Hello from "
+ client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in =
new DataInputStream(inFromServer);
System.out.println("Server says " + in.readUTF());
client.close();
}catch(IOException e)
{
}
}
}

代码编译良好。但是当我运行该程序时,首先是服务器,然后是客户端,服务器显示

Waiting for client on port 9000...
Socket timed out!

客户端显示

Connecting to MyServerName on port 9000

代码有什么问题吗?我尝试增加和减少超时值,但它给出相同的输出。

最佳答案

What is wrong with the code?

你的代码没有任何问题。您设置了 50 秒的接受超时,接受阻塞了 50 秒而没有客户端尝试连接,因此抛出了 SocketTimeoutException。这里的一切都按设计运行。

当然有可能:

  • 您的接受超时时间太短
  • 您不想仅仅因为接受超时而中止服务器
  • 您根本不希望接受超时。

所有这些都是取决于您的要求的设计决策。

也有可能您在客户端中输入了错误的主机名,但由于您忽略了客户端中的异常:

catch(IOException e)
{
}

你永远不会知道。永远不要忽略IOExceptions

关于Java套接字编程——连接完成之前套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931221/

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