按照網上示例寫了下面這個Socket案例,但是運行不起來(IntelliJ IDEA 2017工具),代碼如下:
package com.example.demo.RUNOOB.NetWorking;
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("等待遠程連接,端口號爲:" + serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("遠程主機地址:" + server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("謝謝連接我:" + 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.run();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
錯誤報示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at com.example.demo.RUNOOB.NetWorking.GreetingServer.main(GreetingServer.java:38)
經過細細檢查,問題出在:int port = Integer.parseInt(args[0]);,這裏調用了 args[0],所以在程序運行時必須提供參數輸入,否則運行報錯。
解決方法:
1.IntelliJ IDEA:選擇 Edit Configurations...,在 configuration 選項卡中找到 Program arguments 輸入一個值,例如:6066,點擊 OK 按鈕,再次運行就不會報錯了。
2.Eclipse:對該類進行右擊選擇 Run as -> Run configurations,再選擇“Arguments”部分,輸入參數。