Answers

Question and Answer:

  Home  Java Network programming

⟩ What you know about Random Port?

Example: A Random Port

import java.net.*;

import java.io.*;

public class RandomPort {

public static void main(String[] args) {

try {

ServerSocket server = new ServerSocket(0);

System.out.println("This server runs on port "

+ server.getLocalPort( ));

}

catch (IOException e) {

System.err.println(e);

}

}

}

Here's the output of several runs:

D:JAVAJNP2examples11>java RandomPort

This server runs on port 1154

D:JAVAJNP2examples11>java RandomPort

This server runs on port 1155

D:JAVAJNP2examples11>java RandomPort

This server runs on port 1156

At least on this VM, the ports aren't really random; but they are at least indeterminate until runtime. Socket Options

The only socket option supported for server sockets is SO_TIMEOUT. SO_TIMEOUT is the amount of time, in milliseconds, that accept( ) waits for an incoming connection before throwing a java.io.InterruptedIOException. If SO_TIMEOUT is 0, then accept( ) will never time out. The default is to never time out.

Using SO_TIMEOUT is rather rare. You might need it if you were implementing a complicated and secure protocol that required multiple connections between the client and the server where some responses needed to occur within a fixed amount of time. Most servers are designed to run for indefinite periods of time and therefore use the default timeout value, which is 0 (never time out). public void setSoTimeout(int timeout) throws SocketException

The setSoTimeout( ) method sets the SO_TIMEOUT field for this server socket object. The countdown starts when accept( ) is invoked. When the timeout expires, accept( ) throws an InterruptedIOException. You should set this option before calling accept( ); you cannot change the timeout value while accept( ) is waiting for a connection. The timeout argument must be greater than or equal to zero; if it isn't, the method throws an IllegalArgumentException. For example:

try {

ServerSocket server = new ServerSocket(2048);

server.setSoTimeout(30000);

// block for no more than 30 seconds

try {

Socket s = server.accept( );

// handle the connection

// ...

}

catch (InterruptedIOException e) {

System.err.println

("No connection within 30 seconds");

}

finally {

server.close( );

}

catch (IOException e) {

System.err.println

("Unexpected IOException: " + e);

}

public int getSoTimeout( ) throws IOException

The getSoTimeout( ) method returns this server

socket's current SO_TIMEOUT value. For example:

public void printSoTimeout(ServerSocket server)

{

int timeout = server.getSoTimeOut( );

if (timeout > 0) {

System.out.println(server + " will time out after "

+ timeout + "milliseconds.");

}

System.out.println(server + " will never time out.");

}

else {

System.out.println("Impossible condition occurred in "

+ server);

System.out.println("Timeout cannot be less than zero." );

}

}

 200 views

More Questions for you: