Sockets 插座过了一会儿就关上了
我有我的套接字关闭或重置了一段时间后,我认为垃圾收集的问题,通过它的读写器 用于处理响应的异步任务:Sockets 插座过了一会儿就关上了,sockets,garbage-collection,Sockets,Garbage Collection,我有我的套接字关闭或重置了一段时间后,我认为垃圾收集的问题,通过它的读写器 用于处理响应的异步任务: @Override protected Void doInBackground(Void... params) { //Log.e("NEW LISTENER THREAD NAME", name); //initializations try{ clientSocket = new Socket(); //clientSocket.s
@Override
protected Void doInBackground(Void... params) {
//Log.e("NEW LISTENER THREAD NAME", name);
//initializations
try{
clientSocket = new Socket();
//clientSocket.setTcpNoDelay(true);
clientSocket.connect(new InetSocketAddress(serverURL, dataServerPort));
requestSender = new PrintWriter(new PrintStream(clientSocket.getOutputStream(), true,"UTF-8"));
Sender.Init();
}catch(Exception e){
e.printStackTrace();
}
gsonObj = new GsonBuilder().create();//This the object that handels every comming response
finish = false;
try{
listener = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}catch (IOException e) {
Log.e("FROM CREATING LISTENER", "FROM CREATING LISTENER ========> ");
e.printStackTrace();
}
LOGGED_IN = StaticArea.getLoggedIn(cnt);
if(LOGGED_IN){
USER = StaticArea.getUserName(cnt);
Sender.ResumeUser();
/*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
Message connectionMsg = new Message();
connectionMsg.obj = Boolean.valueOf(true);
serviceHandler.handleMessage(connectionMsg);
/*********END DELEGATING CONNECTING TO SERVER*************/
}else{
/*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
Message connectionMsg = new Message();
connectionMsg.obj = Boolean.valueOf(false);
serviceHandler.handleMessage(connectionMsg);
/*********END DELEGATING CONNECTING TO SERVER*************/
}
GoOnline();
while(!finish){
try{
answerS = listener.readLine();
if(answerS != null )//to avoid any null response
if(answerS.contains(Response.MYRESPONSE){
if(MyService.theHandler != null){
Message msg = new Message();
msg.obj = answerS;
MyService.theHandler.sendMessage(msg);
Sender类是具有静态方法并使用my sockets输出的类:
public class Sender {
private static Gson gsonObj;
public static void Init() {
gsonObj = new GsonBuilder().create();
}
public static void SendTestRequest(){
try{
Request req = new Request();
req.setR_TYPE(Request.TEST);
String reqString = gsonObj.toJson(req);
requestSender.println(reqString);
requestSender.flush();
}catch(Exception e){
}
}//end method
请提供更多信息。什么代码语言,操作系统,你怎么知道它被其他东西关闭了?在这里粘贴一些代码。尝试检查套接字错误。Win GetLastError将为您提供更多信息。我正在使用android,我看到它在服务器端关闭,例外情况是由对等方重置连接。在我使用了它的写入程序之后,我在客户端关闭了它,然后它的垃圾被回收。我的代码在上面。当连接被对等方重置时,你无法控制它。您必须处理此异常并中断发送/接收。查找对等方断开您连接的原因(请与WireShark等协议分析器进行检查)-可能是您连接的端口不存在,或者您发送了一条格式错误的消息。引发异常的确切位置是哪里?