我一直在编写一个需要连接到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);
但它没有任何区别。
关于我可以采取哪些行动的想法?
答案 0 :(得分:2)
尝试:
socket = new Socket();
socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout);
答案 1 :(得分:1)
SO_TIMEOUT设置仅影响从套接字读取,而不影响初始连接。您可以通过创建未连接的套接字然后使用允许connect
参数的timeout
方法来使连接超时:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(serverAddr, SERVERPORT), timeout);