2010-08-28 15 views
11

पर सर्वरस्केट का उपयोग नहीं कर सकता है मैं एंड्रॉइड डिवाइस पर ServerSocket का उपयोग कर पोर्ट पर सुनने की कोशिश कर रहा हूं। मैं एक ही नेटवर्क पर एक कंप्यूटर का उपयोग कर वाईफाई पर इस बंदरगाह से कनेक्ट करने में सक्षम होना चाहता हूं।एंड्रॉइड

मैं जब यह एक बंदरगाह के लिए बाध्य भी इसका अपवाद नहीं मिलता है, लेकिन जब मैं netstat जाँच यह कहते हैं:

Proto Recv-Q Send-Q Local Address   Foreign Address   State 
tcp  0  0 (null):4040    (null):*    LISTEN 

मैं इसे बाध्यकारी स्थानीय होस्ट करने के लिए, 0.0.0.0, वाईफ़ाई लैन आईपी के अनगिनत तरीकों की कोशिश की है SocketInetAddress और InetAddress.getByName के साथ डिवाइस का पता। कुछ भी काम नहीं करता है।

जब मैं एक ही WiFi में एक कंप्यूटर से पोर्ट से कनेक्ट करने की कोशिश (मैं दोनों netcat की कोशिश की है और जावा के Socket.connect()), सभी मैं Wireshark में देख सकते हैं एक एआरपी अनुरोध है:

Who has [phone's LAN address]? Tell [computer LAN address]. 

यह समय समाप्त होने तक अनुरोध दोहराएं।

मैंने कंप्यूटर पर सर्वर सॉकेट सेट करके और उस पोर्ट से उस पोर्ट से कनेक्ट करके रिवर्स तरीके से प्रयास किया है, जो बहुत अच्छी तरह से काम करता है।

मेरा परीक्षण फोन कस्टम रोम के साथ एक सैमसंग स्पािका i5700 है।

कोई विचार?

संपादित करें: कोड इस रूप में सरल है:

ServerSocket server = new ServerSocket(); 
server.setReuseAddr(true); 
server.setTimeout(0); 
server.bind(new InetSocketAddress(4040)); 

Socket client = null; 
while((client = server.accept()) == null); 
// Connected 
enter code here 
enter code here 
+0

आप कुछ कोड दिखा सकते हैं? क्या आप मैनिफेस्ट फ़ाइल में सही अनुमति सेट करते हैं? – Flo

+0

मैंने कुछ कोड के साथ प्रश्न अपडेट किया है। हां, मैंने मैनिफेस्ट में अनुमति इंटरनेट सेट किया है। – shuwo

+0

'ServerSocket.accept()' शून्य वापस नहीं कर सकता है। – EJP

उत्तर

4

server.bind उपयोग करने के बजाय, इस तरह सर्वर सॉकेट आरंभ की कोशिश: सर्वर = नए ServerSocket (4040);

इसके अलावा, server.accept() वास्तव में तो आप की जरूरत नहीं है कि जब तक पाश, जब तक एक कनेक्शन हो जाने पर अवरुद्ध कर देगा (देखें: http://download.oracle.com/javase/1.5.0/docs/api/java/net/ServerSocket.html#accept())

0

मैं

का उपयोग करके यह काम कर प्राप्त करने में सक्षम था
ServerSocket server = new ServerSocket(myTcpPort, 0, addr); 

जहां आपके फोन के addr = InetAddress। अन्यथा, यह केवल स्थानीयहोस्ट (127.0.0.1) से जुड़ा हुआ प्रतीत होता है। इसके अलावा, मैं पोर्ट 8080

+0

आप अपने फोन की InetAddress कैसे ढूंढते हैं? – JPM

+0

यदि आप होस्टनाम तर्क को छोड़ देते हैं या 'शून्य' पास करते हैं तो इसे '0.0.0.0 'से बांधना चाहिए। – EJP

0

उपयोग कर रहा हूँ मैं भी इस के साथ संघर्ष किया और केवल का उपयोग करके अपने Android सर्वर से कनेक्ट करने में सक्षम था:

ServerSocket myServerSocket = new ServerSocket(); 
String hostname = getLocalIpAddress(); 
myServerSocket.bind(new InetSocketAddress(hostname, myPort)); 

कहाँ होस्टनाम स्थानीय IP, जो मैं का उपयोग कर मिल गया था getLocalIpAddress() इस पेज से समारोह:

https://github.com/Teaonly/android-eye/blob/master/src/teaonly/droideye/MainActivity.java