socket编程心得

    在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 , 以释放Socket 占用的包括端口在内的各种资源. Socket 的 close() 方法负责关闭Socket. 当一个Socket对象被关闭, 就不能再通过它的输入流和输出流进行I/O操作, 否则会导致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();}

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值