java SOCKET编程 ,如何跳出accept() 阻塞? 35
java服务器,需要和安卓设备交互,我这边java写服务端,服务端需要将数据以json格式通过DatagramSocket发送给安卓设备,数据比较多需要安卓设备一个一个处...
java服务器,需要和安卓设备交互,我这边java写服务端,服务端需要将数据以json格式通过DatagramSocket发送给安卓设备,数据比较多需要安卓设备一个一个处理,安卓设备每处理一条数据就用socket连接java服务器,给服务器发送一条信息,java服务器这边一直监听。但是程序需要先启动服务socket = server.accept();(等待连接,但是这个方法会一直阻塞,直到有客户端连接才会继续执行。)。我现在需要提前启动服务,然后再执行服务器给安卓设备发送数据的操作,等数据发送完成,安卓设备处理完数据后才会连接服务器。但是accept方法一直阻塞,这样的话我服务器给安卓设备发送的代码会不执行。怎么样预先启动服务,就是调用accept方法,还不让它阻塞,等accept方法下面的发送数据的代码执行完成后,再连接服务。 求大神帮忙。(必须用SOCKET,其他的非阻塞方法不能用。)
展开
3个回答
2014-09-02
展开全部
socket = server.accept();
使用线程,,,,,必要时中断线程
使用线程,,,,,必要时中断线程
追问
能详细说说么,有没没有demo啊? 谢谢
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最好的办法是建立一个本地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放在一个线程里来运行,这样主线程也能干别的事,没必要放在主线程里一直堵塞着干等着......
如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放在一个线程里来运行,这样主线程也能干别的事,没必要放在主线程里一直堵塞着干等着......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |