papalive Δημοσ. 29 Μαρτίου 2010 Δημοσ. 29 Μαρτίου 2010 Μπορεί καπιος να εξηγησει πως μπορω να χρησιμοποιήσω τις functions send( m_socket, sendbuf, strlen(sendbuf), 0 ); και recv(ConnectSocket, recvbuf, recvbuflen, 0); μεταξύ client και server? Ξέρω πως πρέπει να γίνουν τα παρακάτω για client και server Server 1. Initialize Winsock. 2. Create a socket. 3. Bind the socket. 4. Listen on the socket for a client. 5. Accept a connection from a client. 6. Receive and send data. 7. Disconnect. Client 1. Initialize Winsock. 2. Create a socket. 3. Connect to the server. 4. Send and receive data. 5. Disconnect. αλλά δεν μπορώ να καταλάβω πως θα στειλουν δεδομένα μεταξύ τους.πχ να στείλει ο server το HELLO WORLD!!!
karabouzouk... Δημοσ. 29 Μαρτίου 2010 Δημοσ. 29 Μαρτίου 2010 http://www.insomnia.gr/forum/showthread.php?t=345276 Από εδώ ίσως κάτι σε βοηθήσει.. Κάπου μέσα είχα δώσει και ένα λινκ από έναν πολύ καλό οδηγό που τα εξηγούσε όλα τα σχετικά με sockets και είχε και παραδείγματα.. Και αν ψάξεις και στο wikipedia για αυτές τις συναρτήσεις επίσης νομίζω ότι έχει έτοιμα παραδείγματα... Δεν έχω εύκαιρο compiler για να τσεκάρω τον κώδικα που έδωσες..
papalive Δημοσ. 29 Μαρτίου 2010 Μέλος Δημοσ. 29 Μαρτίου 2010 Απο την στιγμή που θα γίνει η σύνδεση μεταξύ client - server πως θα μεταφερθούν δεδομένα με την χρήση των send - rcv ? ? ? ? ? ? ? ? ? ? ? ? ?
C6WGMN Δημοσ. 29 Μαρτίου 2010 Δημοσ. 29 Μαρτίου 2010 Απο την στιγμή που θα γίνει η σύνδεση μεταξύ client - server πως θα μεταφερθούν δεδομένα με την χρήση των send - rcv ? ? ? ? ? ? ? ? ? ? ? ? ? Τα υπόλοιπα βήματα τα κατανοείς? Οποιοδίποτε βιβλίο για sockets έχει παραδείγματα server-client (συνήθος echo/time server).
papalive Δημοσ. 29 Μαρτίου 2010 Μέλος Δημοσ. 29 Μαρτίου 2010 Στέλνει ενα string στο buffer αλλά πως θα το λάβει ο server? Αν θελεις ρίξε μια ματιά στον κώδικα.C++ ειναι με το Rad Studio 2010 clientClass.zip wcomm.zip
Evgenios1 Δημοσ. 30 Μαρτίου 2010 Δημοσ. 30 Μαρτίου 2010 server iniz winsock -> accept... -> recv -> send ->recv-> etc... close-> accept... clinet iniz winsock -> connect...->send ->recv -> send -> etc... close 10 χαρακτηρες.. Γουσταρω το Μαρακι
papalive Δημοσ. 30 Μαρτίου 2010 Μέλος Δημοσ. 30 Μαρτίου 2010 Ειναι μια συνάρτηση ( φυσικά ολα τα προηγούμενα που απαιτούνται τρέχουν κανονικά ) ... bool clientClass::createSocket(char *ip,char *port){ ZeroMemory( &hints, sizeof(hints) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; //ως ip βάζω 127.0.0.1 και Port 80 .Τα δεδομένα αυτά τα δίνω σε δυο απλά editBox //ΠΡΟΣΟΧΗ ΣΤΟ argv[1] // Resolve the server address and port iResult = getaddrinfo(ip ,port , &hints, &result); if (iResult != 0) { printf("getaddrinfo failed: %d\n", iResult); WSACleanup(); return false; } } που οταν την καλώ μου εμφανίζει το παρακάτω μήνυμα το Rad Studio 2010 και δεν ξέρω γιατί. [iLINK32 Error] Error: Unresolved external 'getaddrinfo' referenced from C:\USERS\VASO\DESKTOP\FLASH\CLIENT\DEBUG\CLIENTCLASS.OBJ Η κλήση της getaddrinfo(ip ,port , &hints, &result); είναι το Α και το Ω και χωρίς αυτήν δεν μπορώ να προχωρήσω!!!! ( Μήπως παίζει τίποτα με τα VISTA ??? ) για λεπτομέρειες -> http://msdn.microsoft.com/en-us/library/bb530741%28VS.85%29.aspx
bookysmell2004 Δημοσ. 30 Μαρτίου 2010 Δημοσ. 30 Μαρτίου 2010 Έχεις κάνει link την wsock32.lib ή την ws2_32.lib? η συνάρτηση που αναφέρεις είναι εκεί.
papalive Δημοσ. 30 Μαρτίου 2010 Μέλος Δημοσ. 30 Μαρτίου 2010 Έχεις κάνει link την wsock32.lib? η συνάρτηση που αναφέρεις είναι εκεί. Εχω δηλώσει τα παρακάτω #include <stdio.h> #include <winsock2.h> #include <ws2tcpip.h> #include<VCL.h> #pragma comment(lib,"ws2_32.lib"); και ΤΡΕΧΕΙ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! thanks για τις απαντήσεις αν εχω κάτι αλλο θα ενημερώσω!!!! ( χοχοχοχοχοχοχο )
papalive Δημοσ. 30 Μαρτίου 2010 Μέλος Δημοσ. 30 Μαρτίου 2010 Καλησπέρα και πάλι. Τελικά κατάφερα και εκανα αυτό που ήθελα οπότε και χάρηκα!! Εχω τώρα άλλες απορίες. 1) Για να μπορέσουν να συνδεθούν περισσότεροι του ενός clients θα πρέπει ο server να χρησιμοποιεί τα νήματα ( threads ) ετσι δεν είναι ? Κάποια επιπλέον πληροφορία η κώδικα για πειράμαα αν γνωρίζεται??? 2) Στον server δίνω την διεύθυνση 127.0.0.1 δηλαδή δουλεύω τοπικά.Αν θέλω να συνδεθώ σε άλλο υπολογιστή μεσω router τι θα πρέπει να διαβάσω και να γνωρίζω προκειμένου να το πετύχω??? 3) Οταν στέλνω με την send(...) ενα μηνυμα απο τον server στον client τότε μεφανίζεται κανονικα στην πλευρά του client.Οταν ομως στελνω ενα μήνυμα απο τον client στον server τότε η recv(...) δεν εκτελείται κανονικα και μου επιστρέφει κωδικό σφαλματος 10053 οταν χρησιμοποιησω την GetLastError(); γιατί άραγεεε??? παραθέτω και τους κωδικες server bool serverClass::sendData(char *buffer){ if (send(mySocket,buffer,strlen(buffer),0) == SOCKET_ERROR){ closesocket(mySocket); WSACleanup(); return false; } return true; } char* serverClass::recvData(){ i = recv(mySocket, buffer , size , 0); //εδω αν εκτελεστει σωστα η recv(...) επιστρέφει //τον αριθμό των bytes που δεχτηκε.Α δεν λειτουργήσει επιστρέφει //-1.Χρησιμοποίησα την GetLastError και επέστρεψε κωδικό σφάλματος //10053. if(i>0) { buffer='\0'; return buffer; } else { return buffer="error"; } } client bool clientClass::sendingData(char *message){ if (send(ConnectSocket,message,strlen(message),0) == SOCKET_ERROR){ closesocket(ConnectSocket); WSACleanup(); return false; } return true; } char* clientClass::recvData(){ i = recv(ConnectSocket, recvbuf, recvbuflen, 0); if(i>0) { recvbuf='\0'; return recvbuf; } }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.