2010-06-01 29 views
6

Sabah.Java'da UDP Yayını

Java ve soket bağlantılarında oldukça yeniyim, ancak bir cihaza 8001 numaralı bağlantı noktasında 255.255.255.255 numaralı telefondan UDP paketi/yayını göndermeye çalışıyorum. Verileri iyi gönderecek şekilde alabilirim, ancak veriyi almak için zaman geldiğinde bağlantı zaman aşımına uğrar. Bir paket dinleyicim var ve paketin gönderilip ardından cihazın yanıt verdiğini görebiliyorum.

Eminim ki kodumda eksik olduğum bir çaylak hatası var ama bir süredir takılı kaldım ve herhangi bir yardım takdir edilecekti.

m_Socket = new DatagramSocket(m_SERVERPORT); 
InetAddress address = InetAddress.getByName(m_SERVERIP); 


m_DataPack = new DatagramPacket(m_SERVERCMD.getBytes(), m_SERVERCMD.getBytes().length, 
address, m_SERVERPORT); 
m_Socket.setBroadcast(true); 
m_Socket.connect(address, m_SERVERPORT); 

m_Socket.send(m_DataPack); 
m_DataPack = new DatagramPacket(data, data.length, 
address, m_SERVERPORT); 


m_Socket.receive(m_DataPack); // This is where it times out 


data = m_DataPack.getData(); 
String received = data.toString(); 
System.out.println("Received: " + received); 
m_Socket.close(); 

Teşekkürler ve Gig'Em.

DÜZENLEME:

ben bu yardımcı olur emin değilim ama m_Socket nesneyi izlerken gönderir hemen önce aşağıdaki görebilirsiniz:

bound = true; 
close = false; 
connectedAddress = Inet4Address (id = 32) (-1,-1,-1,-1); 
connectedPort = 8001; 
connectState = 1; 
created = true; 
impl = PlainDatagramSocketImpl; 
oldImpl = false; 

ve m_DataPack nesne şudur:

address = Inet4Address (id = 32) (-1,-1,-1,-1); 
bufLength = 6 (size of packet I'm sending is 6 char long); 
offset = 0; 
port = 8001; 
+0

Gig'Em'inizin Amerika'daki büyük CS programlarından birinin mezunlarını yabancılaştırdığını biliyorsunuz, değil mi? – jasonmp85

+0

@ jasonmp85, ne anlama geldiğini merak edenler için Texan: https://en.wikipedia.org/wiki/Traditions_of_Texas_A%26M_University#Gig_.27em (evet, ben bakmak zorunda;;)) – Matthieu

cevap

1

Eğer yerel bitiş noktasına bind() gereken bir veri birimi almak istiyorsanız (adres + bağlantı noktası).

+0

işlev Yerel uç noktayı bir SocketAddress aracılığıyla bir adrese ve bağlantı noktasına ayarlamanız gerekir. Bunu yapmanın en iyi yolu nedir? DatagramPacket Sınıfında bir getSocketAddress(); Bu yüzden bana yardım etmiyor. – user355528

+0

Ben yaptım m_DataPack = yeni DatagramPacket (veri, data.length, InetAddress.getLocalHost(), m_SERVERPORT); ve daha sonra m_Socket.bind (m_DataPack.getSocketAddress()); ancak soketin zaten bağlı olduğunu söyleyen bir istisna atar. – user355528

+0

Bağlanıyor, yeni DatagramSocket (int bağlantı noktası) bu. – EJP

10

Bu mantıklı değil. 1’den çoğuna kadar yayın yapıyorsunuz ve siz de 1’den 1’e bağlanıyorsunuz. Hangisi?

Bağlantıyı kesin. Ve 255.255.255.255'i kaybedin. Bu yaklaşık 20 yıldır yoğun bir şekilde kullanılmamaktadır. Bir alt ağ yerel yayın adresi kullanın, ör. 192.168.1.255.