在已建立的连接上,我要不定时的向SOCKET服务器发送数据。
我的发送函数是这样:if(null == this.sock)
{
this.currentConnStatus = ConnStatus.DISCONNECTED;
return;
}

try 
{
PrintWriter pw = new PrintWriter(sock.getOutputStream());
pw.write("handShake");
pw.flush();

//读缓冲
BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));

String tempString = br.readLine(); logger.info("Server return:" + tempString);

catch (IOException e) 
{
sock = null;
this.currentConnStatus = ConnStatus.DISCONNECTED;

stopReadWriteThread();
e.printStackTrace();
}但是服务器端总是收不到,好像发送一次后再发送socket就不可用了。是不是因为每次发送的时候,都新建PrintWriter的原因?为什么我发完后关了PrintWriter的话,socket也就关掉了?

解决方案 »

  1.   

    是不是因为每次发送的时候,都新建PrintWriter的原因?为 肯定是 
    用一个就够了 为啥每次都新建?
      

  2.   

    因为这是一个单独的函数,每次写数据的时候要调用,只给一个参数socket
      

  3.   

    socket本身没关(如果关了就抛异常了),但是socket的输出流关了
    可以用isOutputShutdown()来看看是否关了输出流
      

  4.   

    向我这么用,每次都新建PrintWriter但是不关闭,会有问题吗?
      

  5.   

    如果光是不关闭,应该没问题的,PrintWriter使用的是socket的资源,最后把socket关了就可以了
    不过不知道你的程序有没有多线程的问题(当然这个跟你的问题无关,只是多线程的话不能保证传输的一致性)
      

  6.   

    有多线程的我一个线程负责读,一个线程负责写。上面的函数就是在写线程里调用的。数据是从 ArrayBlockingQueue中取的,每take到一个数据就调用一次上面的代码这会有问题吗?
      

  7.   

    很好奇的一个问题,你在服务器端是怎么读的
    如果你用readline方法的,我觉得你肯定读不到,原因在于发送的服务器的消息
    并没有回车换行\r\n
    所以你的消息会被一直阻塞把你服务器端的代码贴出来给我看看
      

  8.   

    感觉有问题,你多个线程都take到数据,会多个线程同时执行该方法