Red de conocimiento informático - Aprendizaje de programación - Código fuente JAVA ssc

Código fuente JAVA ssc

Hay dos tipos de clientes, uno es para enviar mensajes y recibir mensajes al mismo tiempo, similar al servidor.

Otro método simple es simplemente enviar el mensaje y usar la API directamente.

/**

*Envía el mensaje de forma asincrónica y ciérralo después de enviarlo.

* @param remoteSocketAddress

* @param msg

* @return

*/

público estático booleano sendSocketMsgNio(InetSocketAddress remoteSocketAddress, String msg){

//byte buffer w_buf = byte buffer.allocation(msg.getBytes(). length);

byte[ ]salida de datos = msg . getbytes();

buffer de bytes = buffer de bytes asignar(salida de datos. longitud);

Pruebe {

canal de socket sc = canal de socket. . open();

sc . connect(remoteSocketAddress);

buffer.put(dataOutput, 0, salida de datos . length); ();

sc.write(búfer);

sistema fuera . p>Devuelve verdadero

} catch (IOException e) {

Logger.error("¡¡Error al enviar datos!!!"+e . getmessage()

);

Devuelve falso

}

}

Para el primer caso, el código básico es el siguiente:

Clase pública ChannelClient implementa Runnable {

Dirección InetSocketAddress privada;

Cliente de canal público (dirección remota InetSocketAddress){

this.address = dirección remota

}

public void run(){

prueba {

selector selector = selector open();

canal de socket sc = socket. canal . open();

sc .configurar bloqueo(false);

sc.connect(dirección);

sc.register( Selector, clave de selección). . OP_CONNECT);

//Escuchar

mientras (verdadero) {

prueba {

int num = 0;

p>

num = selector.select();

if(num >0) {

Iterador <SelectKeys>it = selector.selectedKeys ().

iterador();

mientras (it.hasNext()) {

tecla de selección clave = it . next();

int ready ops = clave. operaciones listas();

it . remove();

//Manejar eventos IO

if((operaciones listas y tecla de selección. OP_CONNECT) == SelectionKey. OP_CONNECT) {

sc. finalizar conectar();

proceso de cliente de socket. );

sc.register(selector, clave de selección. OP_READ);

}

if((operaciones listas y clave de selección. OP_READ) = = Tecla de selección.

OP_READ) {

Pruebe {

processRead(sc);

}catch(Exception e) {

sc close(). ;

Romper;

}

}

}

}

} catch(Excepción e) {

e . printstacktrace();

Continuar

}

}

} catch(Exception e) {

e . printstacktrace();

}

}

privado estático int BUFFER _ TAMAÑO = 10240;

byte público[]proceso de lectura(canal de socket sc){

Prueba {

byte BUFFER BUFFER = byte BUFFER asignar(BUFFER _ TAMAÑO. );

búfer de cadena s = nuevo búfer de cadena();

int r = 0;

booleano isWait = verdadero

mientras ((r = sc . read(buffer))& gt;=0) {

if(r==0){

if(isWait){

mientras(verdadero){

hilo . dormir(1);

r=sc.read(búfer); 0){

isWait = false

Break;

}

}

}else{< / p>

Romper;

}

}

búfer . flip();

byte[]datos = nuevo byte [búfer . límite()];

buffer.get(datos);

s.append(nueva cadena(datos));

BUFFER = byte BUFFER . asignar(BUFFER _ TAMAÑO);

buffer .clear();

}

sistema println("-cliente recibido- "). ;

sistema . println(s . tostring());

sistema . println("-"); (). getBytes();

} catch(Excepción e) {

Devolver nulo

}

}

}

Si tienes alguna duda, puedes enviar un correo electrónico para comunicarte: qfylwc@126.com.