Ruby:无法进行UDP套接字连接或向Android发送UDP数据包
你好 我正在制作一个Android应用程序,它向Ruby服务器发送UDP数据包,然后由Ruby服务器将数据包转发给所有订阅的Android客户端,包括原始发件人 我的服务器接收数据包,但无法发送数据包或通过UDP套接字连接 服务器代码片段(Ruby,在Fedora22上):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发送的。我
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();
}