2014-12-27 5 views
0
지정된 클라이언트에 TCPNIOServerConnection으로 FilterChain 외부에 "쓰기", 내가 항상 곁에 다음과 같은 예외가 있어요

:를 작성 아무 문제가 없다ServerSocketChannelImpl는 ClassCastException 쓰기 서버에서 클라이언트 자바 그리 즐로

INFORMATION: Write to /127.0.0.1:50559 
Dez 27, 2014 10:57:11 PM org.glassfish.grizzly.filterchain.DefaultFilterChain execute 
WARNUNG: GRIZZLY0013: Exception during FilterChain execution 
java.lang.ClassCastException: sun.nio.ch.ServerSocketChannelImpl cannot be cast to java.nio.channels.SocketChannel 
    at org.glassfish.grizzly.nio.transport.TCPNIOUtils.writeSimpleBuffer(TCPNIOUtils.java:108) 
    at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:126) 
    at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:106) 
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:260) 
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:169) 
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:71) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:126) 
    at org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:413) 
    at org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:407) 
    at org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:395) 
    at net.vistahr.moose.server.connection.push.ServerConnection.writeTo(ServerConnection.java:58) 
    at net.vistahr.moose.server.connection.push.ServerConnection.broadcast(ServerConnection.java:46) 
    at net.vistahr.moose.server.service.auth.AuthService.startServerPush(AuthService.java:45) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at net.vistahr.moose.server.filter.DelegateServiceFilter.handleRead(DelegateServiceFilter.java:43) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 

FilterChainContext로를 메시지를 지정된 클라이언트에 보내지 만 예외 연결은 매번 발생합니다.

TCPNIOServerConnection connection = getTransport().bind(host, port); 
getTransport().start(); 
connection(destinationAddress, pushMessage, null); 

(FilterChain 외부의) 클라이언트와 통신하는 다른 방법이 있습니까?

답변

0

서버 측 TCPNIOServerConnection에 쓸 수 없으며 클라이언트 측 TCPNIOConnection에만 쓸 수 있습니다. 예 :

Connection c = transport.connect("www.google.com", "80"); 
c.write(....); 
+0

답장을 보내 주셔서 감사합니다.하지만 모든 클라이언트에 푸시 브로드 캐스트를 실현하고 싶습니다. 클라이언트에게 "밀어 넣을"방법이 없습니까? – DaCatIsInDaSack

+0

아쉽게도 열린 연결 목록을 유지하고 루프의 모든 연결에 데이터를 쓰는 것 이외의 모든 연결을 푸시 할 수있는 방법이 없습니다. – alexey