首次接触网络编程时,出现了这个错误。进行查找相关资料和解决办法,最后解决了问题。
二:具体说明
出现这种情况的原因是由于程序异常关闭,进而导致端口被异常关闭的僵尸程序所占用。
解决办法
在cmd命令行通过netstat -ano | findstr 8080
netstat -ano | findstr 10000
查询到被占用的端口号(8080)的进程
根据进程号(pid),输入以下的命令,强制杀死该端口号的僵尸程序。
taskkill /pid 11628 /F
经过此过程,程序就可以正常启动了。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Server {
public static void main(String[] args) throws IOException {
//System.out.println(123);
// 存活
ServerSocket ss = new ServerSocket(8080); // 监听8080端口
for (; ; ) {
Socket socket = ss.accept();
Thread t = new Handler(socket);
t.start();
}
//System.out.println(ss.accept().getInetAddress());
// 对外提供访问路径
// 解析request
// 处理业务逻辑
// 封装response
}
}
// 处理每一个进入的请求
class Handler extends Thread {
Socket socket;
public Handler() {
}
public Handler(Socket socket) {
this.socket = socket;
}
// 对外提供访问路径
// 解析request
// 处理业务逻辑
// 封装response
@Override
public void run() {
System.out.println(12);
try {
InputStream inputStream = this.socket.getInputStream();
OutputStream outputStream = this.socket.getOutputStream();
handle(inputStream, outputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void handle(InputStream input, OutputStream output) throws IOException {
var reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
var writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
// 通知http请求
boolean isOk = false;
String first = reader.readLine();
System.out.println(first);
}
}