简体   繁体   中英

SCTP implementation with java?

如何使用Java实现网关和服务器之间的SCTP协议?

No need, just use sctp :

https://github.com/RestComm/sctp

Handles most needs, works great.

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

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

        } 
    } 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM