java SOCKET编程 ,如何跳出accept() 阻塞? 35

java服务器,需要和安卓设备交互,我这边java写服务端,服务端需要将数据以json格式通过DatagramSocket发送给安卓设备,数据比较多需要安卓设备一个一个处... java服务器,需要和安卓设备交互,我这边java写服务端,服务端需要将数据以json格式通过DatagramSocket发送给安卓设备,数据比较多需要安卓设备一个一个处理,安卓设备每处理一条数据就用socket连接java服务器,给服务器发送一条信息,java服务器这边一直监听。但是程序需要先启动服务socket = server.accept();(等待连接,但是这个方法会一直阻塞,直到有客户端连接才会继续执行。)。我现在需要提前启动服务,然后再执行服务器给安卓设备发送数据的操作,等数据发送完成,安卓设备处理完数据后才会连接服务器。但是accept方法一直阻塞,这样的话我服务器给安卓设备发送的代码会不执行。怎么样预先启动服务,就是调用accept方法,还不让它阻塞,等accept方法下面的发送数据的代码执行完成后,再连接服务。 求大神帮忙。(必须用SOCKET,其他的非阻塞方法不能用。) 展开
 我来答
小傻

推荐于2017-09-02 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部
JavaSOCKET变成,accept()阻塞用来接受用户请求,如果跳出这段阻塞的代码就失去了网络连接的意义。
如果真要强制退出,可以使用return语句。
匿名用户
2014-09-02
展开全部
socket = server.accept();
使用线程,,,,,必要时中断线程
追问
能详细说说么,有没没有demo啊?  谢谢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4f071d1
2018-07-19
知道答主
回答量:3
采纳率:0%
帮助的人:2108
展开全部
最好的办法是建立一个本地socket来实现一次连接来跳出accept状态,之后就可以进行break等操作了
如while(true) {
serverSocket.accept()
if (....)

break;

..............
}
那么如果你的accept是运行在线程里的话,在main函数里可以采取一次本地连接: Socket socket = new Socket("127.0.0.1", port)来连接一次服务器使其能跳出accept阻塞,其中127.0.0.1是所有电脑都默认的本地ip, 所以是通用的不必担心
但如果你的accept是在主线程里,,如写在了main里,那只有强制return或直接在控制台关闭了
如果服务器长期属于待机状态,推荐把accept放在一个线程里来运行,这样主线程也能干别的事,没必要放在主线程里一直堵塞着干等着......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式