2010-02-02 11 views
20

अनिवार्य रूप से मैं एक मूल जावा सर्वर चाहता हूं जो एकाधिक लोगों से कनेक्ट किया जा सकता है और जब कनेक्टेड क्लाइंट में से एक (ओबेज-सी में पहले से कोड किया गया है) डेटा भेजता है, तो यह इसे कनेक्ट किए गए सभी को वापस भेजता है।मूल जावा सर्वर कैसे बनाएं?

मैं एक असली जावा न्यूबी हूं और मुझे किसी भी चीज़ के लिए अचूक भविष्य में जावा की आवश्यकता नहीं है, लेकिन इसलिए मैं इसे जावा से ठीक से सीखने के बजाय जितनी जल्दी हो सके इसे बाहर करना चाहता हूं। तो अगर किसी के पास इस के लिए कुछ स्रोत कोड है या शायद एक ट्यूटोरियल है तो इसकी सराहना की जाएगी।

धन्यवाद :) Ozzie

+0

क्लाइंट किस प्रकार का प्रोटोकॉल उपयोग कर रहे हैं? –

+1

वे सॉकेट का उपयोग करते हैं :) – IApp

+4

फिर से खोलने के लिए वोट दिया गया - इसलिए वास्तव में यह पता लगाने की आवश्यकता है कि कई अच्छे उत्तरों वाले प्रश्नों को कैसे संभाला जाए। –

उत्तर

16

यहाँ एक सरल "नोक-नोक" सूर्य के सर्वर शिष्टाचार है:

import java.net.*; 
import java.io.*; 

public class KnockKnockServer { 
    public static void main(String[] args) throws IOException { 

     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(4444); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 4444."); 
      System.exit(1); 
     } 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(
       new InputStreamReader(
       clientSocket.getInputStream())); 
     String inputLine, outputLine; 
     KnockKnockProtocol kkp = new KnockKnockProtocol(); 

     outputLine = kkp.processInput(null); 
     out.println(outputLine); 

     while ((inputLine = in.readLine()) != null) { 
      outputLine = kkp.processInput(inputLine); 
      out.println(outputLine); 
      if (outputLine.equals("Bye.")) 
       break; 
     } 
     out.close(); 
     in.close(); 
     clientSocket.close(); 
     serverSocket.close(); 
    } 
} 

आप इस तुलना में बहुत सरल नहीं मिल सकता है।

http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html#server

यह ऊपर के रूप में एक बुनियादी एकल थ्रेड के साथ शुरू होता है और के रूप में आवश्यक एकाधिक उपयोग करने के लिए लागू होता है:

+0

मैंने आज पहले उस पर एक त्वरित नजर डाली थी और मैंने PHP में ऐसा कुछ कोड किया जो पहले परीक्षण के लिए बहुत अच्छा काम करता था। फिलहाल मैं कनेक्ट करने और कई उपयोगकर्ताओं को भेजने के लिए देख रहा हूं, जाहिर है मुझे मल्टी-थ्रेडिंग की आवश्यकता है? क्या आप जानते हैं कि मैंने आपके द्वारा प्रदान किए गए उदाहरण पर ऐसा करने के बारे में कैसे जाना होगा? – IApp

+1

http://www.kieser.net/linux/java_server।एचटीएमएल - आप बस एक वर्ग बनाते हैं जो कनेक्शन को संभालता है और इसे थ्रेड() –

+13

के माध्यम से आमंत्रित करता है 'KnockKnockProtocol' क्या है? –

-1

आप शायद serversocket वर्ग का उपयोग करने की आवश्यकता होगी।

+0

ये मैंने इसके बारे में कुछ देखा लेकिन इसे समझना काफी मुश्किल लगता है। धन्यवाद हालांकि :) – IApp

0

मैंने एक जावा प्रोग्राम किया जो मूल रूप से क्लाइंट और सर्वर के बीच एक प्रकार की बातचीत लागू करता था। आने वाले कनेक्शन सुनने वाले सर्वर के बंदरगाह को खोलने के लिए सॉकेट का उपयोग किया जाता है। आपके पास एक थ्रेड सुनना चाहिए और कभी भी वैध कनेक्शन आने पर कार्रवाइयों को कॉल करना चाहिए।

+0

ये, मैं एक मूल PHP सॉकेट सर्वर काम करने में कामयाब रहा लेकिन यह एक समय में केवल 1 क्लाइंट को जोड़ने में सक्षम था। जब तक यह एक्शनस्क्रिप्ट या उद्देश्य-सी नहीं है मैं मूल रूप से खो गया हूँ! – IApp

1

जेटी सर्वर API का उपयोग करने का प्रयास करें। http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty एक अच्छा प्रारंभिक बिंदु की तरह दिखता है ...

+0

धन्यवाद! मैं एक नजर मार लूगां! एकमात्र समस्या यह है कि मेरे पास सचमुच कोई जावा ज्ञान नहीं है, इसलिए मुझे इसके बारे में बहुत कुछ समझना मुश्किल लगता है। मुझे अपने क्लाइंट को प्रदर्शित करने के लिए केवल जावा सर्वर की ज़रूरत है। हालांकि मैं वास्तव में विश्वविद्यालय पाठ्यक्रम के अनुरूप अगले वर्ष जावा सीखने की योजना बना रहा हूं जो मैं कर रहा हूं! – IApp

+0

हाँ इसे जावा के कुछ ज्ञान की आवश्यकता है, भले ही यह सरल वेब आधारित अनुरोध/प्रतिक्रिया दृश्यों के लिए काफी सरल हो। मुझे लगता है कि निसान फैन का जवाब आपके उपयोग के मामले के लिए बेहतर है। – Philippe

+0

@IApp - आपके द्वारा वर्णित प्रोजेक्ट के लिए, मैं किसी भी ढांचे का उपयोग करने की अनुशंसा नहीं करता (जेटी एक ढांचा है)। KISS - इसे छोटा और सरल रखें। –

4

सूर्य के माध्यम से एक सरल ट्यूटोरियल उपलब्ध नहीं है।

संबंधित मुद्दे