Реализация SCTP с Java? - PullRequest
       31

Реализация SCTP с Java?

0 голосов
/ 18 сентября 2011

Как реализовать протокол SCTP между шлюзом и сервером с Java?

Ответы [ 3 ]

0 голосов
/ 05 июня 2017

Нет необходимости, просто используйте sctp :

https://github.com/RestComm/sctp

Работает с большинством потребностей, отлично работает.

0 голосов
/ 22 сентября 2017

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

        } 
    } 
}
0 голосов
/ 18 сентября 2011

Если ваша цель - Java 7, никогда не пытайтесь ее реализовать. Как заявили Эндрю и Том, это уже реализовано в качестве основной функции.

...