मैं यूडीपी डेटा प्राप्त करने की कोशिश कर रहा हूं जो नेटवर्क पते पर प्रसारित किया जा रहा है 192.168.103.255 पोर्ट 3000 प्लेकैप (http://www.signal11.us/oss/playcap/) द्वारा। मुझे इस पते और बंदरगाह पर बाध्यकारी समस्याएं आ रही हैं।यूडीपी डेटा प्राप्त करने के लिए एक विशिष्ट आईपी पते और बंदरगाह के लिए बाध्यकारी
public static void main(String[] args) {
try {
DatagramSocket s = new DatagramSocket();
InetSocketAddress address = new InetSocketAddress("192.168.103.255", 3000);
s.bind(address);
byte buffer[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
System.out.println("Waiting...");
s.receive(packet);
System.out.println("Received!");
} catch (Exception e) {
e.printStackTrace();
}
}
इस त्रुटि देता है: यहाँ मेरी जावा कोड है
java.net.SocketException: already bound
at java.net.DatagramSocket.bind(Unknown Source)
at runner.main(runner.java:12)
मैं कमांड "netstat -एक -n" समाप्त हो गया है, और न तो पता है और न ही 192.168.103.255 पोर्ट 3000 में कहीं भी सूचीबद्ध हैं आउटपुट, इसलिए मुझे नहीं लगता कि यह बंदरगाह पहले से ही उपयोग में है। असल में, मुझे यह त्रुटि किसी भी पते/पोर्ट संयोजन के लिए मिलती है जो मैं कोशिश करता हूं (मेरे स्थिर आईपी पते सहित)।
मैंने सॉकेट बनाने और इस पते और बंदरगाह से बांधने के लिए कुछ सी कोड भी लिखा, लेकिन यह बाध्य कॉल पर भी विफल रहता है। हालांकि, यह कोड मेरे स्थिर आईपी पते (1 9 2.168.1.149) पर बंदरगाहों से जुड़ जाएगा। यहां वह कोड है:
#include <stdio.h>
#include <sys/types.h>
#include <winsock.h>
#include <unistd.h>
#define a1 192
#define a2 168
#define a3 103
#define a4 255
#define PORT 3000
int main() {
/* Open windows connection */
WSADATA w;
if (WSAStartup(0x0101, &w) != 0)
{
printf("Could not open Windows connection.\n");
exit(0);
}
/* Clear out server struct */
SOCKADDR_IN server;
memset((void *)&server, '\0', sizeof(struct sockaddr_in));
/* Set family and port */
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.S_un.S_un_b.s_b1 = (unsigned char)a1;
server.sin_addr.S_un.S_un_b.s_b2 = (unsigned char)a2;
server.sin_addr.S_un.S_un_b.s_b3 = (unsigned char)a3;
server.sin_addr.S_un.S_un_b.s_b4 = (unsigned char)a4;
/* Open a datagram socket */
int sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd == INVALID_SOCKET)
{
printf("Could not create socket.\n");
WSACleanup();
exit(0);
}
/* Bind address to socket */
if (bind(sd, (struct sockaddr *)&server, sizeof(SOCKADDR_IN)) == -1)
{
printf("Could not bind name to socket.\n");
closesocket(sd);
WSACleanup();
exit(0);
}
/* Receive */
char data[1024];
printf("Waiting to receive...\n");
if (recv(sd, (char *)&data, (int)sizeof(data), 0))
{
printf("Error receiving data.\n");
closesocket(sd);
WSACleanup();
exit(0);
}
printf("Data: %s", data);
return 0;
}
मैं विंडोज 7 मशीन का उपयोग कर रहा हूं। मैं एक्लिप्स में जावा कोड चला रहा हूं। मैं MinGW आदेश का उपयोग कर के साथ सी कोड संकलन कर रहा हूँ:
gcc a.c -lws2_32
("a.c" फ़ाइल नाम है)।
जबकि जावा कोड अधिक महत्वपूर्ण है, मुझे यह जानकर ख़ुशी होगी कि मेरे कोड उदाहरणों में से मैं गलत कहां जा रहा हूं। किसी भी सुझाव की बहुत सराहना की जाती है।
Win32 त्रुटियां क्या हैं? स्थिर आईपी क्यों? –
आप "प्रसारण" क्यों कह रहे हैं और फिर स्थिर आईपी ?? –