Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:无法进行UDP套接字连接或向Android发送UDP数据包_Android_Ruby_Sockets_Udp - Fatal编程技术网

Ruby:无法进行UDP套接字连接或向Android发送UDP数据包

Ruby:无法进行UDP套接字连接或向Android发送UDP数据包,android,ruby,sockets,udp,Android,Ruby,Sockets,Udp,你好 我正在制作一个Android应用程序,它向Ruby服务器发送UDP数据包,然后由Ruby服务器将数据包转发给所有订阅的Android客户端,包括原始发件人 我的服务器接收数据包,但无法发送数据包或通过UDP套接字连接 服务器代码片段(Ruby,在Fedora22上): netstat-u不显示服务器中的任何UDP连接。我是StackOverflow新手,因此欢迎提供任何反馈/编辑/提示。我通过用Python重写ruby代码解决了这个问题。因此,服务器肯定不是因为某种原因阻止UDP发送的。我

你好

我正在制作一个Android应用程序,它向Ruby服务器发送UDP数据包,然后由Ruby服务器将数据包转发给所有订阅的Android客户端,包括原始发件人

我的服务器接收数据包,但无法发送数据包或通过UDP套接字连接

服务器代码片段(Ruby,在Fedora22上):


netstat-u
不显示服务器中的任何UDP连接。

我是StackOverflow新手,因此欢迎提供任何反馈/编辑/提示。我通过用Python重写ruby代码解决了这个问题。因此,服务器肯定不是因为某种原因阻止UDP发送的。我是StackOverflow新手,所以欢迎提供任何反馈/编辑/提示。我通过用Python重写ruby代码解决了这个问题。因此,服务器肯定不是出于某种原因阻止UDP发送的。
SERVER_SEND_PORT = 4000
ANDROID_PORT = 7500

# Send socket
s_socket = UDPSocket.new
s_socket.setsockopt(Socket::SOL_SOCKET,Socket::SO_BROADCAST, 1)
s_socket.bind(SERVER_IP, SERVER_SEND_PORT) 

# Receive socket
r_socket = UDPSocket.new
r_socket.setsockopt(Socket::SOL_SOCKET,Socket::SO_BROADCAST, 1)
r_socket.bind(SERVER_IP, RECEIVE_PORT)

$clientIPs = []
$clientPorts = []

def broadcast(data)             
  $clientIPs.each_with_index do |ip, index|
    puts "trying to send #{data}"
    s_socket.connect(ip, ANDROID_PORT)  # does not pass this step
    puts "connected"
    s_socket.send(data, 0)
    #s_socket.send(data, 0, ip, ANDROID_PORT)
    puts "sent: " + data;
  end
end

while true
  data, client = r_socket.recvfrom(256)
  puts "received: " + data
  Thread.new(client) do |clientAddr|
    if !$clientIPs.include? clientAddr[3]
      $clientIPs << clientAddr[3]
      $clientPorts << clientAddr[1]
    end

    broadcast(data)
  end
end
private static final int LISTENING_PORT = 7500;  

public void onStart() {

    /* Unrelated code + Sending socket */ 

    // Receiving Thread
    new Thread(){
        public void run() {
            // Create receiving socket at a given port
            try {
                rSocket = new DatagramSocket(LISTENING_PORT);
                rSocket.setBroadcast(true);
            } catch (SocketException e) {
                e.printStackTrace();
            }
            Log.d("Trace", "Created receiving socket");

            while (true) {
                if (rSocket != null) {
                    // Receive data
                    byte[] buf = new byte[256];
                    DatagramPacket packet = new DatagramPacket(buf, buf.length);
                    try {
                        rSocket.receive(packet);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Got the packet!");
                }
            }
        }
    }.start();
}