我在界面上用一个按钮的单击事件来创建一个socket,代码如下:sock = new Socket(tv_ip.getText().toString(), port);
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())), true);另外我用另一个按钮来发送数据,代码如下:if(sock.isConnected()){
if(!sock.isOutputShutdown()){
out.println(str_send);
tv_result.setText(str_send);
}
}但是只能发一次,必须再单击创建socket的按钮,才能再次发送。按道理,我是没有关闭socket连接的。由于对android的socket处理机制还不是很熟悉,还请各位前辈指教指教,怎么保持创建的socket,直到程序结束

解决方案 »

  1.   

    socket我也没怎么用过,不知道啊
      

  2.   

    但是只能发一次,必须再单击创建socket的按钮,才能再次发送。按道理,我是没有关闭socket连接的。由于对android的socket处理机制还不是很熟悉,还请各位前辈指教指教,怎么保持创建的socket,直到程序结束
    socket get了输入输出流,对应的流不能关闭,关闭了会导致socket失效,需要重新初始化,尤其在ssl连接时,效果会特别差。write out stream后  调用 outsteam.flush() 就行,别close
      

  3.   

    调用flush不行啊。整个过程,我也没有将对应的流关闭
      

  4.   

    没啊。下面是服务的代码
    while(1)
    {
    SOCKET sockcln = accept(sockSrv, (sockaddr*)&addrClient, &len);
    unsigned long IP = addrClient.sin_addr.S_un.S_addr;
    printf("get connect request from IP:%d.%d.%d.%d\n", (IP<<24)>>24, (IP<<16)>>24, (IP<<8)>>24, IP>>24);
    char recvBuf[100];
    memset(recvBuf, 0, sizeof(recvBuf));
    recv(sockcln, recvBuf, sizeof(recvBuf), 0);
    parseMsg(recvBuf);
    }
      

  5.   

    应该用while循环包上,设一个判断,接收完数据后,清空就可以了
      

  6.   


    没有的哦,亲!我调试的时候,数据发完后,socket以及socket的isOutputShutdown标志都是开着的