Java 重新连接插座时重复接收信息
我在使用一个简单的java套接字客户端时遇到了问题:连接建立正确,服务器和客户端都接收和发送数据。当客户端失去连接几秒钟后,套接字将完成并重新建立。这样做是正常的,但在那一刻,客户端最后接收到的消息(在重新连接之前)再次被接收(同一消息的两次接收)而没有任何原因 我的代码是: 要启动套接字,请执行以下操作: 读取数据: 当连接断开时:Java 重新连接插座时重复接收信息,java,android,sockets,bufferedreader,Java,Android,Sockets,Bufferedreader,我在使用一个简单的java套接字客户端时遇到了问题:连接建立正确,服务器和客户端都接收和发送数据。当客户端失去连接几秒钟后,套接字将完成并重新建立。这样做是正常的,但在那一刻,客户端最后接收到的消息(在重新连接之前)再次被接收(同一消息的两次接收)而没有任何原因 我的代码是: 要启动套接字,请执行以下操作: 读取数据: 当连接断开时: 如何重新建立套接字连接?在这个阶段我可以看到两种可能性 在重新创建连接之前,您没有完全删除所有“旧”引用。您是否正在创建全新的插座缓冲读取器输入阅读器线程?等等。
如何重新建立套接字连接?在这个阶段我可以看到两种可能性
插座
<代码>缓冲读取器<代码>输入阅读器线程?等等。如果有您尚未重新创建的内容,它可能会保留以前的值。如果您正在重用IncomingReader
而不是创建一个新的,那么它可能仍然保留旧的值基本上,您需要尽可能确保当连接中断时,客户端和服务器上与连接相关的所有内容都完全关闭,并使用新对象重新创建。如果所有内容都是一个新对象,则不可能有任何旧数据挂在周围来混淆事物。如果您的问题已得到回答,或者不再有效,请“勾选”以选择最合适的答案,以便所有人都知道问题已解决。谢谢
Socket sock = new Socket();
sock.bind(null);
InetSocketAddress isa = new InetSocketAddress(serverIPAddress,serverPort);
sock.connect(isa, conectionTimeOut);
sock.setKeepAlive(true);
InputStreamReader isR = new InputStreamReader(sock.getInputStream(), "UTF8");
reader = new BufferedReader(isR);
out = new BufferedWriter(new OutputStreamWriter(
sock.getOutputStream(), "UTF8"));
public class IncomingReader implements Runnable {
String message = "";
@Override
public void run() {
Thread thisThread = Thread.currentThread();
while (readerThread == thisThread) {
try {
while ((message = reader.readLine()) != null) {
manageServerMessage(message);
}
} catch (IOException e) {
Log.d(General.TAG, e.getMessage()+" "+e.getCause());
}
}
public void stopSocket() {
readerThread = null;
try{
if (reader != null){
reader.close();
reader=null;
}
} catch (IOException e) {
Log.d(General.TAG, e.getMessage()+" "+e.getCause());
}
try{
if (out != null)
out.close();
} catch (IOException e) {
Log.d(General.TAG, e.getMessage()+" "+e.getCause());
}
try{
if (sock != null){
sock.close();
sock=null;
}
} catch (IOException e) {
Log.d(General.TAG, e.getMessage()+" "+e.getCause());
sock=null;
}
readerThread = null;
}