如何用java实现网关和服务器之间的SCTP协议?
How to implement SCTP protocol between a gateway and a server with java ?
如果您的目标是 Java 7,请不要尝试实现它。正如安德鲁和汤姆所说,它已经作为核心功能实现了。
If your target is Java 7 never try to implement it. As Andrew and Tom stated its already implemented as a core feature.
不需要,只需使用sctp:
https://github.com/RestComm/sctp< /a>
满足大多数需求,效果很好。
No need, just use sctp:
https://github.com/RestComm/sctp
Handles most needs, works great.
Windows 不支持 SCTP。如果想在 Windows 上使用,请安装 sctp 驱动程序。否则,使用 linux 我添加简单的客户端服务器示例
Client.java
package mai; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import com.sun.nio.sctp.MessageInfo; import com.sun.nio.sctp.SctpChannel; public class Client { public static void main(String[] args) { try { //SocketAddress socketAddress = new InetSocketAddress( 6050); InetSocketAddress socketAddress = new InetSocketAddress("192.9.200.193", 4444); System.out.println("open connection for socket [" + socketAddress + "]"); SctpChannel sctpChannel = SctpChannel.open(socketAddress, 1,1); //(socketAddress, 1 ,1 ); sctpChannel.bind(new InetSocketAddress(4444)); //6060 sctpChannel.connect(socketAddress, 1 ,1); System.out.println("sctpChannel.getRemoteAddresses() = " + sctpChannel.getRemoteAddresses()); System.out.println("sctpChannel.getAllLocalAddresses() = " + sctpChannel.getAllLocalAddresses()); System.out.println("sctpChannel.isConnectionPending() = " + sctpChannel.isConnectionPending()); System.out.println("sctpChannel.isOpen() = " + sctpChannel.isOpen()); System.out.println("sctpChannel.isRegistered() = " + sctpChannel.isRegistered()); System.out.println("sctpChannel.provider() = " + sctpChannel.provider()); System.out.println("sctpChannel.association() = " + sctpChannel.association()); System.out.println("send bytes"); final ByteBuffer byteBuffer = ByteBuffer.allocate(64000); //Simple M3ua ASP_Up message byte [] message = new byte []{1,0,3,1,0,0,0,24,0,17,0,8,0,0,0,1,0,4,0,8,84,101,115,116}; final MessageInfo messageInfo = MessageInfo.createOutgoing(null, 0); System.out.println("messageInfo = " + messageInfo); System.out.println("messageInfo.streamNumber() = " + messageInfo.streamNumber()); byteBuffer.put(message); byteBuffer.flip(); sctpChannel.send(byteBuffer, messageInfo); System.out.println("close connection"); sctpChannel.close(); System.in.read(); } catch (Exception e) { e.printStackTrace(); try { System.in.read(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }
Server.java
package mai; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.util.Arrays; import com.sun.nio.sctp.MessageInfo; import com.sun.nio.sctp.SctpChannel; import com.sun.nio.sctp.SctpServerChannel; public class Server { static ByteBuffer rxBuffer; public static void main(String[] args)throws Exception { rxBuffer = ByteBuffer.allocateDirect(64000); rxBuffer.clear(); rxBuffer.rewind(); rxBuffer.flip(); // SctpChannel xx=SctpChannel.open(); com.sun.nio.sctp.SctpChannel sc = com.sun.nio.sctp.SctpChannel.open(); SocketAddress serverSocketAddress = new InetSocketAddress(4444); System.out.println("create and bind for sctp address"); SctpServerChannel sctpServerChannel = SctpServerChannel.open().bind(serverSocketAddress); System.out.println("address bind process finished successfully"); SctpChannel sctpChannel; while ((sctpChannel = sctpServerChannel.accept()) != null) { System.out.println("client connection received"); System.out.println("sctpChannel.getRemoteAddresses() = " + sctpChannel.getRemoteAddresses()); System.out.println("sctpChannel.association() = " + sctpChannel.association()); MessageInfo messageInfo = sctpChannel.receive(rxBuffer=ByteBuffer.allocateDirect(64000) , null, null); int len= messageInfo.bytes(); System.out.println("Server... Total bytes recived "+len); System.out.println("Server... "+messageInfo); rxBuffer.flip(); byte[] data = new byte[len]; rxBuffer.get(data); rxBuffer.clear(); System.out.println("Server..... data "+Arrays.toString(data)); System.out.println("Server..... close connection"); } } }
Windows cannot support SCTP. if want to does with windows plz install sctp driver.Other wise use linux am adding simple client server example
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
如果您的目标是 Java 7,请不要尝试实现它。正如安德鲁和汤姆所说,它已经作为核心功能实现了。
If your target is Java 7 never try to implement it. As Andrew and Tom stated its already implemented as a core feature.
不需要,只需使用sctp:
https://github.com/RestComm/sctp< /a>
满足大多数需求,效果很好。
No need, just use sctp:
https://github.com/RestComm/sctp
Handles most needs, works great.
Windows 不支持 SCTP。如果想在 Windows 上使用,请安装 sctp 驱动程序。否则,使用 linux 我添加简单的客户端服务器示例
Client.java
Server.java
Windows cannot support SCTP. if want to does with windows plz install sctp driver.Other wise use linux am adding simple client server example
Client.java
Server.java