আপনি খুব সাবধানে পুরো ট্রেস পরিদর্শন করা উচিত,
আমি একটি সার্ভার সকেট অ্যাপ্লিকেশন করেছি এবং একটি java.net.SocketException: Connection reset
কেস ঠিক করেছি ।
আমার ক্ষেত্রে এটি ক্লায়েন্টসকেট Socket
অবজেক্ট থেকে পড়ার সময় ঘটে যা কোনও কারণে এর সংযোগটি বন্ধ হয়ে যায়। (নেটওয়ার্ক হারিয়ে গেছে, ফায়ারওয়াল বা অ্যাপ্লিকেশন ক্র্যাশ হয়েছে বা কাছাকাছি উদ্দেশ্যে)
এই সকেট অবজেক্টটি পড়ার সময় যখন আমি একটি ত্রুটি পেয়েছিলাম তখন আমি পুনরায় সংযোগ স্থাপন করছিলাম।
Socket clientSocket = ServerSocket.accept();
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int readed = is.read(); // WHERE ERROR STARTS !!!
মজার বিষয় হ'ল for my JAVA Socket
যদি কোনও ক্লায়েন্ট আমার সাথে সংযোগ স্থাপন করে ServerSocket
এবং is.read()
পুনরাবৃত্তভাবে কোনও কল না প্রেরণ করে তার সংযোগটি বন্ধ করে দেয় seems তবে মনে হয় এই সকেটটি পড়ার জন্য লুপ থাকা অবস্থায় আপনি একটি বদ্ধ সংযোগ থেকে পড়ার চেষ্টা করছেন। আপনি পড়ার অপারেশনের জন্য নীচের মতো কিছু ব্যবহার করেন;
while(true)
{
Receive();
}
তারপরে আপনি নীচে এবং পরে কিছু স্ট্যাকট্রেস পান
java.net.SocketException: Socket is closed
at java.net.ServerSocket.accept(ServerSocket.java:494)
আমি যা করেছি তা হ'ল সার্ভারসকেট বন্ধ করে আমার সংযোগটি নবায়ন করা এবং আগত ক্লায়েন্ট সংযোগগুলির জন্য অপেক্ষা করা
String Receive() throws Exception
{
try {
int readed = is.read();
....
}catch(Exception e)
{
tryReConnect();
logit(); //etc
}
//...
}
এটি অজানা ক্লায়েন্ট সকেট হারানোর জন্য আমার সংযোগটি পুনরায় স্থাপন করে
private void tryReConnect()
{
try
{
ServerSocket.close();
//empty my old lost connection and let it get by garbage col. immediately
clientSocket=null;
System.gc();
//Wait a new client Socket connection and address this to my local variable
clientSocket= ServerSocket.accept(); // Waiting for another Connection
System.out.println("Connection established...");
}catch (Exception e) {
String message="ReConnect not successful "+e.getMessage();
logit();//etc...
}
}
আমি অন্য কোনও উপায় খুঁজে পেলাম না কারণ নীচের চিত্র থেকে আপনি যেমন দেখতে পেলেন ততক্ষণ আপনি সংযোগটি হারিয়েছেন কিনা তা বুঝতে পারবেন না try and catch
, কারণ সবকিছু ঠিক আছে বলে মনে হচ্ছে। আমি Connection reset
ক্রমাগত পাওয়ার সময় এই স্ন্যাপশটটি পেয়েছি ।