1

我一直在编写一个需要连接到 TCP 服务器的应用程序。我一直试图让这部分代码在无法连接到服务器端端口时发出某种异常。我知道它无法连接,因为我已经关闭了我的服务器并且端口被阻止了。

这是我到目前为止所拥有的:

public void run()
{
    mRun = true;
    try
    {
        InetAddress serverAddr = InetAddress.getByName(SERVERIP);
        Socket socket = new Socket(serverAddr, SERVERPORT);
        try
        {
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

……

在任何情况下,我的代码最终都会卡在新的 Socket() 构造函数上,并且它不会抛出任何 IO 异常。到目前为止我已经尝试过

socket.setSoTimeout(timeout);

但它没有任何区别。

关于我可以采取的可能行动的任何想法?

4

2 回答 2

2

尝试 :

socket = new Socket();
socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout);
于 2013-09-27T12:03:29.140 回答
1

SO_TIMEOUT 设置只影响从套接字读取,而不影响初始连接。connect您可以通过创建未连接的套接字然后使用允许timeout参数的方法来使连接超时:

Socket socket = new Socket();
socket.connect(new InetSocketAddress(serverAddr, SERVERPORT), timeout);
于 2013-09-27T12:00:24.540 回答