1. 程式人生 > >Socket Java設定超時時間

Socket Java設定超時時間

Socket Client Example

//File Name GreetingClient.java
import java.net.*;
import java.io.*;

public class GreetingClient {

	public static void main(String[] args) {
		String serverName = args[0];
		int port = Integer.parseInt(args[1]);
		try {
			System.out.println("Connecting to " + serverName + " on port " + port);
			Socket client = new Socket(serverName, 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) {
			e.printStackTrace();
		}
	}

}

Socket Server Example 連線埠自定義,通過arg設定

//File Name GreetingServer.java
import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {

	private ServerSocket serverSocket;

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

	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) {
		int port = Integer.parseInt(args[0]);
		try {
			Thread t = new GreetingServer(port);
			t.start();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

置超時 1.設定連線請求超時時間,如果連線無響應,則丟擲超時異常 2.設定讀操作超時時長,如過讀取資料流時間超時,則丟擲異常

Socket socket = new Socket(); 
socket.connect(new InetSocketAddress(ipAddress, port), 1000);//設定連線請求超時時間1s socket.setSoTimeout(5000);//設定讀操作超時時間5s

注意:socket.setSoTimeout必須在connect之後設定,不然將不會生效。讀操作將永遠不會超時。