永发信息网

java socket 编程异常

答案:3  悬赏:10  手机版
解决时间 2021-05-02 20:51
  • 提问者网友:最爱你的唇
  • 2021-05-02 04:56

package socket;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.InetSocketAddress;
import java.net.Socket;

public class javaSocket {

 
 private static String sendSynMsg(String ipAddr, byte[] datas) throws

Exception{  
     //解析服务器地址和端口号  
     int dotPos = ipAddr.indexOf(':');  
     String ip = ipAddr.substring(0, dotPos).trim();  
     int port = Integer.parseInt(ipAddr.substring(dotPos+1).trim());  
     InetSocketAddress endpoint = new InetSocketAddress(ip , port);  
       
     Socket socket = null;  
     OutputStream out = null;  
     InputStream in = null;  
     try {         
         socket = new Socket();  
         //设置发送逗留时间2秒  
         socket.setSoLinger(true, 2);   
         //设置InputStream上调用 read()阻塞超时时间2秒  
         socket.setSoTimeout(2000);  
         //设置socket发包缓冲为32k;  
         socket.setSendBufferSize(32*1024);  
         //设置socket底层接收缓冲为32k  
         socket.setReceiveBufferSize(32*1024);  
         //关闭Nagle算法.立即发包  
         socket.setTcpNoDelay(true);  
         //连接服务器  
         socket.connect(endpoint);  
         //获取输出输入流  
         out = socket.getOutputStream();  
         in = socket.getInputStream();  
         //输出请求            
         out.write(datas);  
         out.flush();  
         //接收应答  
         BufferedReader br = new BufferedReader( new InputStreamReader(in) ,

4096);  
         StringWriter received = new StringWriter(4096);  
         char[] charBuf = new char[4096];  
         int size =0;  
         char lastChar = 0;  
         do {  
            System.out.println(charBuf);
             size = br.read(charBuf , 0 , 4096);
             System.out.println(size);
            
             lastChar = charBuf[size-1];  
             if(lastChar == 0){  
                 received.write(charBuf, 0, size - 1);  
             }  
             //System.out.println(received.toString());  
         }while(lastChar != 0);  
           
         return received.toString();  
           
     } finally {  
         if (out != null) {  
             try {  
                 out.close();  
             } catch(Exception ex) {  
                 ex.printStackTrace();  
             }  
         }  
         if (in != null) {  
             try {  
                 in.close();  
             } catch(Exception ex) {  
                 ex.printStackTrace();  
             }  
         }         
         if (socket != null) {  
             try {  
                 socket.close();  
             } catch(Exception ex) {  
                 ex.printStackTrace();  
             }  
         }  
     }                 
 } 
 

   
    public static void main(String[] args) {
     try {
   byte[] by=new byte[10];
   javaSocket.sendSynMsg("10.10.2.89:8008",by);
  } catch (Exception e) {
   System.out.println

("eeeeeeeeeeeeeeeeeeeeeeeeeee:"+e.toString());
  }
 }
}

程序在运行的时候总报   eeeeeeeeeeeeeeeeeeeeeeeeeee:java.net.SocketTimeoutException:

Read timed out 异常
    异常出现的原因就是size = br.read(charBuf , 0 , 4096)。

最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-05-02 05:14

是不是你的那个地址有问题啊


你ping一下看通不通

全部回答
  • 1楼网友:第四晚心情
  • 2021-05-02 06:05
在read是要在try块里进行,因为read会出现异常。没有收到信息
  • 2楼网友:等灯
  • 2021-05-02 05:27
看样子是远程服务器有问题,连接不上。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯