2
Java 및 SCTP 프로토콜을 사용하여 일대 다 연결을 만들기 위해 Java에서 작업 중입니다.Java에서 SCTP 일대 다
SctpMultiChannel을 설치하고 실행 중이며 메시지를받을 수 있지만 모든 연결에 메시지를 보내려면 특별한 조치가 필요합니까?
The error message:
java.net.SocketException: Invalid argument
at sun.nio.ch.SctpChannelImpl.send0(Native Method)
at sun.nio.ch.SctpMultiChannelImpl.send0(SctpMultiChannelImpl.java:976)
at sun.nio.ch.SctpMultiChannelImpl.sendFromNativeBuffer(SctpMultiChannelImpl.java:888)
at sun.nio.ch.SctpMultiChannelImpl.send(SctpMultiChannelImpl.java:847)
at sun.nio.ch.SctpMultiChannelImpl.send(SctpMultiChannelImpl.java:824)
at org.test.MultiServer.run(MultiServer.java:56)
그리고 전체 코드는 :
SocketAddress serverSocketAddress = new InetSocketAddress(SOCKET_PORT);
SctpMultiChannel smc;
try {
Logger.info("Start");
smc = SctpMultiChannel.open().bind(serverSocketAddress);
ByteBuffer buf = ByteBuffer.allocateDirect(160);
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
AssociationHandler assocHandler = new AssociationHandler();
MessageInfo messageInfo;
while ((messageInfo = smc.receive(buf, System.out, assocHandler)) != null) {
Logger.debug(messageInfo.toString());
buf.flip();
Logger.debug(decoder.decode(buf).toString());
Logger.info(smc.associations().size() + "");
ByteBuffer buf1 = ByteBuffer.allocateDirect(60);
CharBuffer cbuf1 = CharBuffer.allocate(60);
charset = Charset.forName("ISO-8859-1");
CharsetEncoder encoder = charset.newEncoder();
cbuf1.put("foo").flip();
encoder.encode(cbuf1, buf1, true);
buf1.flip();
for (Association ass : smc.associations()) {
MessageInfo mi = MessageInfo.createOutgoing(ass, null, 1);
smc.send(buf, mi);
}
cbuf1.clear();
buf1.clear();
buf1.flip();
}
smc.close();
} catch (IOException e) {
Logger.error("Server error");
e.printStackTrace();
}
이 내 클라이언트가 메시지를 전송 한 다음 새 메시지를 수신 대기 할 것입니다, 지금까지 한 일이다. 내가 목표로하는 것은 수신 거부 쿼리가 아닌 동일한 채널에서 메시지를 보내고받을 수 있도록 비 차단 방법을 사용하는 것입니다.
누구나이 경험이 있습니까?
최고의
, 헨릭 나는하여 messageInfo가 정확하지 말할 수있는 오류에서
예외를 표시하십시오. – nos
질문에 오류를 추가했습니다. – Hiny