开发者

SCTP implementation with java?

How to implement SCTP protocol between 开发者_开发知识库a gateway and a server with java ?


If your target is Java 7 never try to implement it. As Andrew and Tom stated its already implemented as a core feature.


No need, just use sctp:

https://github.com/RestComm/sctp

Handles most needs, works great.


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

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"); 

        } 
    } 
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜