MSHService
چهارشنبه 30 مهر 1393, 11:36 صبح
با درود و ادب
منظزورم از کانکشن شکسته ، کانشکنیه که کلاینت یهو کابلش قطع بشه.
سرور چطور باید بفهمه؟!
من کدهای زیر رو نوشتم یه چند باز جواب داد ولی دستکاریش کردم خراب شد!!
فرض کردم کلاینتم Telnet هست و کلاینتمو خودم ننوشتم :)) اگر کلاینتمو خودم بنویسم که راحتم! ولی در این حالت نمیدونم.
چطور میتونم یه KeepAlive یی درست کنم روی سرور که روی تلتنت نشون داده نشه و بشه فهمید که کانکشن شکسته شده(منظورم کابل کلاینت قطع شده و یا توی Vmware شبکه disable شده)
کمک :)
package TEST;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author me-sharifi
*/
public class MyTestServer {
private static ServerSocket ss;
private static Socket s ;
private static InputStream in;
private static PrintWriter mOut;
private static BufferedReader mSocketReader;
public static void main (String[] args){
try {
ss = new ServerSocket(2222);
} catch (IOException ex) {
System.err.println("ERR Exception : "+ex.getMessage());
}
for (;; ) {
try {
s = ss.accept();
System.out.println("Client Accepted : " + s);
mOut = new PrintWriter(
new OutputStreamWriter(s.getOutputStream()) );
// mSocketReader = new BufferedReader(
// new InputStreamReader(s.getInputStream()) );
mOut.println("WELOME : "+s);
mOut.flush();
s.setKeepAlive(true);
CheckClientAliveT ca = new CheckClientAliveT(s);
WorkerThread wt = new WorkerThread(s);
ca.start();
wt.start();
} catch (IOException ex) {
Logger.getLogger(MyTestServer.class.getName()).log (Level.SEVERE, null, ex);
System.err.println("ERR run Exception : "+ex.getMessage());
}
}
}
public static class WorkerThread extends Thread{
private Socket mSocket;
private BufferedReader mIn;
private PrintWriter mOut;
public WorkerThread(Socket socket) {
this.mSocket = socket;
try {
// Create character streams for the socket.
this.mIn = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
this.mOut = new PrintWriter(socket.getOutputStream(), true);
} catch (IOException ex) {
System.err.println("Eception ERR : WorkerThread :"+ex.getMessage());
}
}
@Override
public void run() {
// Accept messages from this client and broadcast them.
// Ignore other clients that cannot be broadcasted to.
while ((!isInterrupted())) {
// while ((true)) {
try{
String input = mIn.readLine();
if (input == null) {
return;
}
System.out.println("From Client : "+input);
mOut.println("MESSAGE " + ": " + input);
if(mOut.checkError())
System.out.println("mOut.checkError() TRUE");
} catch (IOException ex) {
System.err.println("Eception ERR run : "+ex.getMessage());
}
}
// System.err.println("Socket : "+mSocket+" Interupted!");
}
}
public static class CheckClientAliveT extends Thread{
private Socket mSocket;
private BufferedReader mIn;
private PrintWriter mOut;
public CheckClientAliveT(Socket socket) {
this.mSocket = socket;
try {
this.mOut = new PrintWriter(socket.getOutputStream(), true);
this.mIn = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// this.mOut = new PrintWriter(socket.getOutputStream());
} catch (IOException ex) {
System.err.println("Eception ERR : SendThread :"+ex.getMessage());
}
}
@Override
public void run() {
// for (int i = 0; (i < 1000) && (!isInterrupted()) ; i++) {
for (int i = 0; (i < 100) ; i++) {
mOut.println("Send " + ": " +i);
if(mOut.checkError())
System.out.println("Broken Connection" );
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(MyTestServer.class.getName()).log (Level.SEVERE, null, ex);
}
}
}
}
}
منظزورم از کانکشن شکسته ، کانشکنیه که کلاینت یهو کابلش قطع بشه.
سرور چطور باید بفهمه؟!
من کدهای زیر رو نوشتم یه چند باز جواب داد ولی دستکاریش کردم خراب شد!!
فرض کردم کلاینتم Telnet هست و کلاینتمو خودم ننوشتم :)) اگر کلاینتمو خودم بنویسم که راحتم! ولی در این حالت نمیدونم.
چطور میتونم یه KeepAlive یی درست کنم روی سرور که روی تلتنت نشون داده نشه و بشه فهمید که کانکشن شکسته شده(منظورم کابل کلاینت قطع شده و یا توی Vmware شبکه disable شده)
کمک :)
package TEST;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author me-sharifi
*/
public class MyTestServer {
private static ServerSocket ss;
private static Socket s ;
private static InputStream in;
private static PrintWriter mOut;
private static BufferedReader mSocketReader;
public static void main (String[] args){
try {
ss = new ServerSocket(2222);
} catch (IOException ex) {
System.err.println("ERR Exception : "+ex.getMessage());
}
for (;; ) {
try {
s = ss.accept();
System.out.println("Client Accepted : " + s);
mOut = new PrintWriter(
new OutputStreamWriter(s.getOutputStream()) );
// mSocketReader = new BufferedReader(
// new InputStreamReader(s.getInputStream()) );
mOut.println("WELOME : "+s);
mOut.flush();
s.setKeepAlive(true);
CheckClientAliveT ca = new CheckClientAliveT(s);
WorkerThread wt = new WorkerThread(s);
ca.start();
wt.start();
} catch (IOException ex) {
Logger.getLogger(MyTestServer.class.getName()).log (Level.SEVERE, null, ex);
System.err.println("ERR run Exception : "+ex.getMessage());
}
}
}
public static class WorkerThread extends Thread{
private Socket mSocket;
private BufferedReader mIn;
private PrintWriter mOut;
public WorkerThread(Socket socket) {
this.mSocket = socket;
try {
// Create character streams for the socket.
this.mIn = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
this.mOut = new PrintWriter(socket.getOutputStream(), true);
} catch (IOException ex) {
System.err.println("Eception ERR : WorkerThread :"+ex.getMessage());
}
}
@Override
public void run() {
// Accept messages from this client and broadcast them.
// Ignore other clients that cannot be broadcasted to.
while ((!isInterrupted())) {
// while ((true)) {
try{
String input = mIn.readLine();
if (input == null) {
return;
}
System.out.println("From Client : "+input);
mOut.println("MESSAGE " + ": " + input);
if(mOut.checkError())
System.out.println("mOut.checkError() TRUE");
} catch (IOException ex) {
System.err.println("Eception ERR run : "+ex.getMessage());
}
}
// System.err.println("Socket : "+mSocket+" Interupted!");
}
}
public static class CheckClientAliveT extends Thread{
private Socket mSocket;
private BufferedReader mIn;
private PrintWriter mOut;
public CheckClientAliveT(Socket socket) {
this.mSocket = socket;
try {
this.mOut = new PrintWriter(socket.getOutputStream(), true);
this.mIn = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// this.mOut = new PrintWriter(socket.getOutputStream());
} catch (IOException ex) {
System.err.println("Eception ERR : SendThread :"+ex.getMessage());
}
}
@Override
public void run() {
// for (int i = 0; (i < 1000) && (!isInterrupted()) ; i++) {
for (int i = 0; (i < 100) ; i++) {
mOut.println("Send " + ": " +i);
if(mOut.checkError())
System.out.println("Broken Connection" );
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(MyTestServer.class.getName()).log (Level.SEVERE, null, ex);
}
}
}
}
}