在socket编程时,容易出现异常Unrecognized Windows Sockets error: 0: JVM_Bind ,是因为开启的端口没有关闭,还在被占用。
一、可以手动关闭占用端口的程序:
第一步:进入命令行 查看端口是否被占用
使用命令: netstat -ano
我的服务器的端口是8881
此端口已被PID为3768的进程占用
第二步:查看该PID为 3768 的进程
二、程序中释放端口使用命令:tasklist|findstr "3768"
可以看出 PID为3768的进程是 javaw.exe
windows任务管理器->查看->选择列 选中PID 然后查看任务管理器,关掉PID为3768的进程
在一个Socket 对象中, 即包含远程服务器的IP 地址和端口信息, 也包含本地客户端的IP 地址和端口信息。
默认情况下, 客户端的IP 地址来自于客户程序所在的主机, 客户端的端口则由操作系统随机分配。Socket类还有两个构造方法允许显式地设置客户端的IP 地址和端口:
//参数localAddr 和 localPort 用来设置客户端的IP 地址和端口
Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
为了确保关闭Socket 的操作总是被执行, 强烈建议把这个操作放在finally 代码块中:
Socket socket = null;
try{
socket = new Socket(www.javathinker.org,80);
//执行接收和发送数据的操作
.........
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(socket != null) socket.close();
}catch(IOException e){e.printStackTrace();}
}