package com.yju.socket ;
import java.io.DataInputStream ;
import java.io.DataOutputStream ;
import java.io.IOException ;
import java.net.InetAddress ;
import java.net.Socket ;
public abstract class SocketTransceiver
implements Runnable {
private boolean runFlag;
public SocketTransceiver
( Socket socket
) { this .socket = socket;
this .addr = socket.getInetAddress ( ) ;
}
return addr;
}
public void start( ) {
runFlag = true ;
}
public void stop( ) {
runFlag = false ;
try {
socket.shutdownInput ( ) ;
in.close ( ) ;
e.printStackTrace ( ) ;
}
}
public boolean send
( String s
) { if ( out != null ) {
try {
out.writeUTF ( s) ;
out.flush ( ) ;
return true ;
e.printStackTrace ( ) ;
}
}
return false ;
}
@Override
public void run( ) {
try {
e.printStackTrace ( ) ;
runFlag = false ;
}
while ( runFlag) {
try {
final String s
= in.
readUTF ( ) ; this .onReceive ( addr, s) ;
runFlag = false ;
}
}
try {
in.close ( ) ;
out.close ( ) ;
socket.close ( ) ;
in = null ;
out = null ;
socket = null ;
e.printStackTrace ( ) ;
}
this .onDisconnect ( addr) ;
}
}
cGFja2FnZSBjb20ueWp1LnNvY2tldDsKCmltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKaW1wb3J0IGphdmEubmV0LlNvY2tldDsKCgpwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU29ja2V0VHJhbnNjZWl2ZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CgoJcHJvdGVjdGVkIFNvY2tldCBzb2NrZXQ7Cglwcm90ZWN0ZWQgSW5ldEFkZHJlc3MgYWRkcjsKCXByb3RlY3RlZCBEYXRhSW5wdXRTdHJlYW0gaW47Cglwcm90ZWN0ZWQgRGF0YU91dHB1dFN0cmVhbSBvdXQ7Cglwcml2YXRlIGJvb2xlYW4gcnVuRmxhZzsKCgoJcHVibGljIFNvY2tldFRyYW5zY2VpdmVyKFNvY2tldCBzb2NrZXQpIHsKCQl0aGlzLnNvY2tldCA9IHNvY2tldDsKCQl0aGlzLmFkZHIgPSBzb2NrZXQuZ2V0SW5ldEFkZHJlc3MoKTsKCX0KCgoJcHVibGljIEluZXRBZGRyZXNzIGdldEluZXRBZGRyZXNzKCkgewoJCXJldHVybiBhZGRyOwoJfQoKCglwdWJsaWMgdm9pZCBzdGFydCgpIHsKCQlydW5GbGFnID0gdHJ1ZTsKCQluZXcgVGhyZWFkKHRoaXMpLnN0YXJ0KCk7Cgl9CgoKCXB1YmxpYyB2b2lkIHN0b3AoKSB7CgkJcnVuRmxhZyA9IGZhbHNlOwoJCXRyeSB7CgkJCXNvY2tldC5zaHV0ZG93bklucHV0KCk7CgkJCWluLmNsb3NlKCk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKCQl9Cgl9CgoKCXB1YmxpYyBib29sZWFuIHNlbmQoU3RyaW5nIHMpIHsKCQlpZiAob3V0ICE9IG51bGwpIHsKCQkJdHJ5IHsKCQkJCW91dC53cml0ZVVURihzKTsKCQkJCW91dC5mbHVzaCgpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCQllLnByaW50U3RhY2tUcmFjZSgpOwoJCQl9CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgoJQE92ZXJyaWRlCglwdWJsaWMgdm9pZCBydW4oKSB7CgkJdHJ5IHsKCQkJaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKHRoaXMuc29ja2V0LmdldElucHV0U3RyZWFtKCkpOwoJCQlvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbSh0aGlzLnNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSk7CgkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewoJCQllLnByaW50U3RhY2tUcmFjZSgpOwoJCQlydW5GbGFnID0gZmFsc2U7CgkJfQoJCXdoaWxlIChydW5GbGFnKSB7CgkJCXRyeSB7CgkJCQlmaW5hbCBTdHJpbmcgcyA9IGluLnJlYWRVVEYoKTsKCQkJCXRoaXMub25SZWNlaXZlKGFkZHIsIHMpOwoJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CgkJCQoJCQkJcnVuRmxhZyA9IGZhbHNlOwoJCQl9CgkJfQoJCgkJdHJ5IHsKCQkJaW4uY2xvc2UoKTsKCQkJb3V0LmNsb3NlKCk7CgkJCXNvY2tldC5jbG9zZSgpOwoJCQlpbiA9IG51bGw7CgkJCW91dCA9IG51bGw7CgkJCXNvY2tldCA9IG51bGw7CgkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewoJCQllLnByaW50U3RhY2tUcmFjZSgpOwoJCX0KCQl0aGlzLm9uRGlzY29ubmVjdChhZGRyKTsKCX0KCgkKCXB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uUmVjZWl2ZShJbmV0QWRkcmVzcyBhZGRyLCBTdHJpbmcgcyk7CgoJCglwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkRpc2Nvbm5lY3QoSW5ldEFkZHJlc3MgYWRkcik7Cn0K