(1)使用netstat命令查看当前正在被使用的TCP端口号。
(2)通过一个 配置参数 来指定TCP服务程序所用的端口号。
if(args.length <1){
ss = new ServerSocket(8001);
}else{
ss = enw ServerSocket(Integer.parseInt(args[0]));
}
运行时 java ReverseServer 8002 传入args参数指定端口号。
上面的服务器程序:http://blog.csdn.net/itm_hadf/article/details/7526260
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/***
*
* (1)编译。
* (2) 运行,并输入:IP地址 和 所监听的端口号。
* (3) 输入 字符。
* (4) 查看 服务器端 是否收到???
*
*/
public class TcpClient {
/**
* @param args
*/
public static void main(String[] args) {
if(args.length < 2){
System.out.println("Usage: java TcpClient ServerIp ServerPort");
return;
}
try {
Socket s = new Socket(args[0],Integer.parseInt(args[1]));
InputStream ips = s.getInputStream();
OutputStream ops = s.getOutputStream();
BufferedReader brNet = new BufferedReader(new InputStreamReader(ips));
PrintWriter pw = new PrintWriter(ops,true);
// 读取 键盘 信息。
BufferedReader brKeyBoard = new BufferedReader(new InputStreamReader(System.in));
while(true){
String strWord = brKeyBoard.readLine();
// 将读取到的内容 写到客户端。
pw.println(strWord);
if(strWord.equalsIgnoreCase("quit")){
break;
}
// 读取服务器端 回执过来的信息。
System.out.println(brNet.readLine());
}
pw.close();
brNet.close();
brKeyBoard.close();
s.close();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(3)将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端口。
(4)编写一个连接服务器的IP地址和端口号不固定在程序代码中,通过程序运行时的运行时参数来指定
提供较好的灵活性和较高的通用性
if(args.length < 2){
return;
}
Socket s = new Socket(args[0], Integer.parseInt(args[1]));