因工作的需要,要对一个网络接口进行压力测试,于是就自己写了个socket的客户端多线程来调用对方的服务,可是在实际操作中经常会出现端口已经不够用的错误即下面这个错误:
No buffer space available (maximum connections reached?): connect
具体的代码如下:socket.setSoLinger(true, 0); 是关键。
public static void callSocket() {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 8080);
socket.setReuseAddress(true);//设置地址可以重用
//注意这是最重要的,默认情况下socket close之后机器的实际端口并不立即释放掉
//设置SoLinger为true后将根据后面的参数来释放机器的端口,填写0表示close时立即释放,未发送的数据全部丢失,
//其他值比如3 表示3秒后释放。
socket.setSoLinger(true, 0);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("ok".getBytes());
outputStream.flush();
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
inputStream.read(b);
inputStream.close();
outputStream.close();
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
socket = null;
}
}