根据上一个博客《Java网络编程聊天室——单线程(二)》我们可以发现,尽管程序已经写完,但是程序仍在本地工具中存放,并没有将它变成一个可执行程序。所以接下来我们要做的就是用maven将项目打包成一个可执行的Java程序。
根据(二)中的代码,我们会发现一个问题,就是端口号被我们设置为固定不变的,这会使得我们将项目发给客户是,如果客户的计算机里有相同的端口号的应用程序,则这个程序将无法使用。所以我们应该将端口号改为通过命令行获取。
一、通过命令行获取端口号
获取服务器端口号:
try {
//0.通过命令行获取服务器端口
int port=7777;
if(args.length>0){
try {
port = Integer.parseInt(args[0]);
}catch(NumberFormatException e){
System.out.println("端口参数不正确采用默认端口"+port);
}
}
//1.创建ServerSocket
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器启动:"+serverSocket.getLocalSocketAddress());
获取客户端端口号:
try {
//0.通过命令行获取端口号
int port =7777;//默认端口号。
if(args.length>0){
try {
port = Integer.parseInt(args[0]);
}catch(NumberFormatException e){
System.out.println("端口参数不正确采用默认端口"+port);
}
}
String host="127.0.0.1";
if(args.length>1){
host=args[1];
}
//1.创建客户端,连接到服务器
Socket clientSocket=new Socket(host,port);
二、配置程序打包输出可执行Jar
(1)服务器配置:
<!--配置程序打包输出可执行的Jar-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<!--Java打包规范中的内容-->
<manifest>
<mainClass>com.single.chat.room.server.SingleServer</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
客户端配置:
<!--配置程序打包输出可执行的Jar-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<!--Java打包规范中的内容-->
<manifest>
<mainClass>com.single.chat.room.client.SingleClient</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
(2)点击打包:
(3)打包完成后可以看到两个Jar包
(4)我们将两个Jar包放在一个文件夹中,就可以使用了。我们打开命令窗口进行运行。
通过命令窗口显示,我们发现客户端与服务器进行一次访问后就自动关闭,这是因为单线程的原因。在程序运行过程中没有连续阻塞。所以后面我会详细介绍多线程聊天室。