我在界面上用一个按钮的单击事件来创建一个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,直到程序结束
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,直到程序结束
socket get了输入输出流,对应的流不能关闭,关闭了会导致socket失效,需要重新初始化,尤其在ssl连接时,效果会特别差。write out stream后 调用 outsteam.flush() 就行,别close
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);
}
没有的哦,亲!我调试的时候,数据发完后,socket以及socket的isOutputShutdown标志都是开着的