android保持socket连接

rfasm 2013-04-27 03:51:46
我在界面上用一个按钮的单击事件来创建一个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,直到程序结束
...全文
434 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30649255 2015-12-09
  • 打赏
  • 举报
回复
楼主问题解决了么?我也遇到这个问题想请教
rfasm 2013-05-13
  • 打赏
  • 举报
回复
引用 13 楼 ydx1991 的回复:
肯定是哪里出现异常了
没有的哦,亲!我调试的时候,数据发完后,socket以及socket的isOutputShutdown标志都是开着的
rfasm 2013-05-13
  • 打赏
  • 举报
回复
引用 12 楼 u010523911 的回复:
应该用while循环包上,设一个判断,接收完数据后,清空就可以了
不是很明白你的意思哦
搞里头 2013-05-11
  • 打赏
  • 举报
回复
肯定是哪里出现异常了
像蚂蚁一样 2013-05-09
  • 打赏
  • 举报
回复
应该用while循环包上,设一个判断,接收完数据后,清空就可以了
rfasm 2013-05-08
  • 打赏
  • 举报
回复
求大神指导啊!
homlee ning 2013-05-03
  • 打赏
  • 举报
回复
但是只能发一次,必须再单击创建socket的按钮,才能再次发送。按道理,我是没有关闭socket连接的。由于对android的socket处理机制还不是很熟悉,还请各位前辈指教指教,怎么保持创建的socket,直到程序结束 socket get了输入输出流,对应的流不能关闭,关闭了会导致socket失效,需要重新初始化,尤其在ssl连接时,效果会特别差。write out stream后 调用 outsteam.flush() 就行,别close
rfasm 2013-05-03
  • 打赏
  • 举报
回复
引用 9 楼 ultrapro 的回复:
是服务给关闭了吧
没啊。下面是服务的代码
	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);
	}
儿大不由爷 2013-05-03
  • 打赏
  • 举报
回复
是服务给关闭了吧
rfasm 2013-05-03
  • 打赏
  • 举报
回复
引用 7 楼 QQ718225250 的回复:
但是只能发一次,必须再单击创建socket的按钮,才能再次发送。按道理,我是没有关闭socket连接的。由于对android的socket处理机制还不是很熟悉,还请各位前辈指教指教,怎么保持创建的socket,直到程序结束 socket get了输入输出流,对应的流不能关闭,关闭了会导致socket失效,需要重新初始化,尤其在ssl连接时,效果会特别差。write out stream后 调用 outsteam.flush() 就行,别close
调用flush不行啊。整个过程,我也没有将对应的流关闭
rfasm 2013-05-02
  • 打赏
  • 举报
回复
引用 5 楼 knxw0001 的回复:
while循环包上
不对吧?你怎么控制
knxw0001 2013-05-02
  • 打赏
  • 举报
回复
while循环包上
rfasm 2013-05-02
  • 打赏
  • 举报
回复
不是吧,感觉对各位前辈来说应该是挺简单的一个问题啊!
mmorss 2013-04-28
  • 打赏
  • 举报
回复
socket我也没怎么用过,不知道啊
rfasm 2013-04-28
  • 打赏
  • 举报
回复
没人?自己顶一个

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧