我已经设置了wifi直接用于两个Android设备中两个应用程序之间的通信。当两个应用程序中只有一个活动时,此工作正常。当我尝试从任何应用程序的第二个活动建立连接时,我收到Socket EADDRINUSE(地址已在使用中)错误。当我关闭应用程序并再次启动它时,也会发生此错误。但是当我在杀死之前打开的应用程序后启动应用程序时它会起作用。
我尝试过socket.setReuseAddress(true),但仍然出现错误。
业主方:
ServerSocket socket = null;
private final int THREAD_COUNT = 10;
private Handler handler;
private final ThreadPoolExecutor pool = new ThreadPoolExecutor(
THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>());
public OwnerSocketHandler(Handler handler) throws IOException {
try {
socket = new ServerSocket();
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(Settings.SERVER_PORT));
this.handler = handler;
} catch (IOException e) {
e.printStackTrace();
pool.shutdownNow();
throw e;
}
}
@Override
public void run() {
while (true) {
try {
pool.execute(new SocketStream(socket.accept(), handler));
} catch (IOException e) {
try {
Log.i(TAG, "socket close");
if (socket != null && !socket.isClosed())
socket.close();
} catch (IOException ioe) {
}
e.printStackTrace();
pool.shutdownNow();
break;
}
}
}
会员方:
@Override
public void run() {
Socket socket = new Socket();
try {
socket.bind(null);
socket.connect(new InetSocketAddress(address.getHostAddress(), Settings.SERVER_PORT), Settings.TIME_OUT);
socketCreator = new SocketCreator(socket, handler);
new Thread(socketCreator).start();
} catch (IOException e) {
e.printStackTrace();
try {
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
return;
}
}
在SocketStream类中,我使用输出和输入流写入/读取数据。
在上述情况下,我该怎么做才能克服这个错误?是否有任何演示,其中多个活动直接使用wifi进行通信?