Java TCP编程

Java TCP编程

可能遇到的异常:

1.java.net.BindException: Address already in use: JVM_Bind
这个异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)或者是绑定端口操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。
如果在绑定端口号时发现想要使用的端口号已经被其他进程占用了,有两种处理方式:
①换其他的端口号使用(常用);
②如果一定要用这个端口号,那么就必须把正在占有这个端口的进程杀死。
Windows系统中在CMD中输入指令:netstat -ano
或者可以进行字符串查找:netstat -ano|findstr “端口号” 在查询结果中,查看PID为多少的进程占用了我们想要使用的这个端口号。然后到任务管理器里面根据PID找到对应的进程将其结束掉,端口号就会释放出来。我们在程序中就可以使用了。如果在任务管理器无法找到指定的PID,例如netstat查出来占用端口号的进程是某一个进程的子进程,那么在任务管理器中无法直接看到这个PID。这时候也可以直接在CMD中使用指令杀死某个进程。
语法:taskkill /t /f /im PID/进程名
//注意:不要轻易使用这种方法,如果想要使用的端口号是被系统级别的服务所占用,或者被软件开发中一些重要的软件占用,例如数据库、SVN等,尽量不要和他去抢,自己选择一个其他的端口号使用。

2.java.net.ConnectException: Connection refused: connect
这个异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是找不到具有此IP地址的服务器,或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

3.java.net.SocketException: socket closed
这个异常在客户端和服务器都有可能发生。原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

    InputStream in=client.getInputStream();
    InputStreamReader isr=new InputStreamReader(in, "GBK");
    BufferedReader bfr=new BufferedReader(isr);
    String  msg=bfr.readLine();
    System.out.println("客户端说:"+msg);
    client.close();   //关闭了链接
    msg=bfr.readLine(); //再次读取就会造成此异常

4.java.net.SocketException: Connection reset** 这个异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常 (Connect reset bypeer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛 出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值