2009-03-19 8 views
34

मुझे एक बहुत ही छोटे सी या सी ++ टीसीपी सर्वर/क्लाइंट समाधान को तुरंत लागू करने की आवश्यकता है। यह केवल एक कंप्यूटर से दूसरे कंप्यूटर पर बाइट्स की सरणी को स्थानांतरित करने के लिए है - स्केलेबल/अत्यधिक जटिल होने की आवश्यकता नहीं है। बेहतर आसान है। यदि आप कर सकते हैं तो त्वरित और गंदे।एक साधारण सी या सी ++ टीसीपी सर्वर और क्लाइंट उदाहरण क्या है?

मैं इस ट्यूटोरियल से कोड का उपयोग करने की कोशिश की, लेकिन मैं इसे लिनक्स में ++ जी का उपयोग कर निर्माण करने के लिए नहीं मिल सका: 3 पार्टी पुस्तकालयों से बचने के लिए http://www.linuxhowtos.org/C_C++/socket.htm

संभव हो तो, मैं करना चाहते हैं, प्रणाली के रूप में मैं मैं इसे चालू कर रहा हूं काफी प्रतिबंधित है। यह सी या सी ++ होना चाहिए क्योंकि मौजूदा एप्लिकेशन पहले ही लागू हो चुका है।

#include <cstdlib> 
#include <cstring> 
#include <unistd.h> 
:

दोनों क्लाइंट और सर्वर के लिए इन हेडर जोड़ें:

EMG-2 के जवाब के लिए धन्यवाद, मैं निम्न चरणों का उपयोग ++ ऊपर कोड नमूना सी के साथ संगत उल्लेख बनाने में कामयाब

server.c में, clilen के प्रकार को socklen_t में बदलें।

if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... } 

करने के लिए::

if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0) 

उत्तर

39

मैंने अतीत में Beej's Guide to Network Programming का उपयोग किया है। यह सी में है, सी ++ नहीं, लेकिन उदाहरण अच्छे हैं। साधारण क्लाइंट और सर्वर उदाहरण प्रोग्राम के लिए सीधे section 6 पर जाएं।

+0

धन्यवाद - मैं एक नमूना पाया (http://beej.us/guide/bgnet/output/html/multipage/clientserver.html#simpleserver), लेकिन मुझे यकीन है कि नहीं कर रहा हूँ अगर यह अधिक है, तो क्या मुझे वास्तव में उस कोड की आवश्यकता है? –

+0

@ निकबॉल्टन 2705: शायद, हाँ। बीज के कोड में त्रुटि प्रबंधन शामिल है, जो मुझे इस कारण का हिस्सा है। यह भी ध्यान रखें कि सर्वर एकाधिक समवर्ती कनेक्शन, और आईपीवी 4 और आईपीवी 6 का समर्थन करता है। –

+0

हाँ, यह एक सुरुचिपूर्ण समाधान के लिए बहुत अच्छा होगा - मैंने देखा है सुविधाओं में से एक क्रमबद्धता, जो चाहिए मैं कुछ बिंदु पर ठीक से इस लागू करने की आवश्यकता मेरे लिए उपयोगी हो सकता है। –

7

कोशिश बढ़ावा :: asio lib (http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html) यह बहुत उदाहरण है

int sockfd, newsockfd, portno/*, clilen*/; 
socklen_t clilen; 

client.c में, निम्न लाइन बदल जाते हैं।

+1

क्या ये नमूने उपयुक्त हैं? http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/example/iostreams/daytime_server.cpp http://www.boost.org/doc/libs/1_36_0/doc /html/boost_asio/example/iostreams/daytime_client.cpp –

12

यदि कोड सरल होना चाहिए, तो आप शायद पारंपरिक बीएसडी सॉकेट के आधार पर सी उदाहरण मांग रहे हैं। छोटे और सरल "हैलो वर्ल्ड" उदाहरण की बात आने पर boost::asio जैसे समाधान इम्हो काफी जटिल हैं।

आपके द्वारा उल्लिखित उदाहरणों को संकलित करने के लिए आपको सरल सुधार करना होगा, क्योंकि आप सी ++ कंपाइलर के तहत संकलित कर रहे हैं। मैं निम्न फ़ाइलों की चर्चा करते हुए हूँ:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
से: निम्नलिखित http://www.linuxhowtos.org/C_C++/socket.htm

  1. जोड़ें दोनों फ़ाइलों को शामिल हैं:

    #include <cstdlib> 
    #include <cstring> 
    #include <unistd.h> 
    
  2. client.c में, लाइन बदलने के लिए:

    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) 
    { ... } 
    

    रहे हैं:

    if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0) 
    { ... } 
    

आप सी में देख सकते हैं ++ एक स्पष्ट कलाकारों की जरूरत है।

1) सरल
2) कांटा
3) धागे

आधारित सर्वर:

http://www.martinbroadhurst.com/server-examples.html

+1

इसके अलावा, server.c मैं में socklen_t को clilen का प्रकार बदलने के लिए किया था, और sizeof (cli_addr) के ouput डाली; –

+0

अच्छा संक्षिप्त जवाब। – bdd

1

यहाँ कुछ उदाहरण के लिए कर रहे हैं वास्तव में एक अच्छा छोटे पार मंच (विंडोज, लिनक्स, मैक OSX): https://github.com/DFHack/clsocket

2

हालांकि कई साल पहले, clsocket लगता

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