Gromguten Skrevet 6. august 2005 Del Skrevet 6. august 2005 Ok, jeg lurer på en ting. Jeg har sett på endel socket programmering tutorial og sett på endel kode. Jeg la merke til at det var egentlig mye kode for og gjøre veldig lite. Så jeg lurer på om noen av dere kan paste en _ENKEL_ måte og sende et ord. Trenger heller ikke og ha med div. feilrapporter i programmet. Dette hadde hjelpt meg myye. Lenke til kommentar
Gjest Slettet-df17e Skrevet 6. august 2005 Del Skrevet 6. august 2005 C eller C++ ? Linux eller Windows ? Lenke til kommentar
Gromguten Skrevet 6. august 2005 Forfatter Del Skrevet 6. august 2005 C++ til Windows Lenke til kommentar
kjetil7 Skrevet 7. august 2005 Del Skrevet 7. august 2005 Sockets er nesten helt likt i Windows og Linux. Det er kun noen detaljer som man må passe på (f.eks. initialisere WS2_32.DLL i Windows). Det finnes en bra introduksjon til sockets som heter "Beej's Guide to Network Programming - Using Internet Sockets". Du finner den via Google. Lenke til kommentar
Gromguten Skrevet 7. august 2005 Forfatter Del Skrevet 7. august 2005 (endret) Har sett på den, men kunne ikke noen vise meg et eksempel av ENKLESTE program mulig å lage? Dessuten synst jeg at den guiden mangler Komplette enkle eksempler Endret 7. august 2005 av Gromguten Lenke til kommentar
Gromguten Skrevet 7. august 2005 Forfatter Del Skrevet 7. august 2005 Hva er det som er vanlig og gjøre? Er det vanlig å lage en funksjon som man kaller WsaStartup() slik som dette? #include <winsock.h> #include <iostream> void WSAstartup() { WSADATA wsaData; if(WSAStartup(MAKEWORD(1, 1) &wsaData) =! 0) { fprintf(stderr, "WSA STARTUP FAILED!\n"); exit(1); } int main() { WSAstartup(); return 0; } Eller gjøre det i main() slik som dette? #include <winsock.h> #include <iostream> int main() { WSADATA wsaData; if(WSAStartup(MAKEWORD(1, 1) &wsaData) =! 0) { fprintf(stderr, "WSA STARTUP FAILED!\n"); exit(1); } return 0; } Hva i all verden gjør MAKEWORD(1, 1)? Trenger man virkelig det? Lenke til kommentar
Gromguten Skrevet 7. august 2005 Forfatter Del Skrevet 7. august 2005 Ingen som har erfaring med socket programmering? Lenke til kommentar
☀ ❄ Skrevet 7. august 2005 Del Skrevet 7. august 2005 1) Windowsprogrammering hører hjemme i Windowsprogrammeringsforumet 2) Vær oppmerksom på forskjellen på =! og !=. Det første betyr "sett venstre side til å være negasjonen av høyre side". Det andre betyr "er ikke lik". Du mener sannsynligvis å bruke !=. 3) Tror dette er det enkleste socket-programmet jeg har liggende... #include <cstring> #include <iostream> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> const int port = 5842; int main(int argc, char* argv[]) { using namespace std; if (argc < 2) { cerr << "Usage: " << argv[0] << " hostname\n"; return 1; } int sockfd = socket(AF_INET, SOCK_STREAM, 0); cout << "Looking up hostname... " << flush; hostent* he = gethostbyname(argv[1]); if (!he) { cerr << "Error! Unable to lookup hostname! Exiting...\n"; return 1; } cout << "done.\nHostname: " << he->h_name << "\n"; cout << "IP-address: " << inet_ntoa(*((in_addr*)he->h_addr)) << "\n" << endl; sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(5842); dest_addr.sin_addr = *((in_addr*)he->h_addr); memset(&(dest_addr.sin_zero), '\0', 8); cout << "Connecting... " << flush; if (connect(sockfd, (sockaddr*)&dest_addr, sizeof(sockaddr))) { perror("connect"); return 1; } cout << "done" << endl; unsigned int a = 0; unsigned int b = 0; unsigned int c = 0; unsigned int d = 0; cout << "\nReceiving a... " << flush; recv(sockfd, &a, 4, 0); cout << a << "\nReceiving b... " << flush; recv(sockfd, &b, 4, 0); cout << b << "\nReceiving c... " << flush; recv(sockfd, &c, 4, 0); cout << c << "\nReceiving d... " << flush; recv(sockfd, &d, 4, 0); cout << d << endl; unsigned int sum = a + b + c + d; cout << "\nSum: " << sum << endl; cout << "Sending the sum... " << flush; send(sockfd, &sum, 4, 0); cout << "done" << endl; char buf[500]; cout << "Receiving result... " << flush; recv(sockfd, &buf, 500, 0); cout << "done" << endl; cout << "The result is: " << buf << endl; cout << "\nClosing socket... " << flush; close(sockfd); cout << "done" << endl; return 0; } Lenke til kommentar
Gromguten Skrevet 7. august 2005 Forfatter Del Skrevet 7. august 2005 (endret) Takker for svar Men et par spm. ang. koden.. 1) Jeg har sett at det ofte står int main(int argc, char* argv[]), men hvilken funksjon har de i koden? 2) return 1? Hva gjør det? Er vant med return 0 3) Noen som vet om en god Winsock programmeringsbok? Endret 7. august 2005 av Gromguten Lenke til kommentar
GeirGrusom Skrevet 7. august 2005 Del Skrevet 7. august 2005 int argc(argument count) er antall parameter sendt til .exe programmet, argv(argument vector) er hvert parameter (det første er alltid fulle navnet til programmet C:\Windows\Calc.exe f.eks.) return 1 betyr at programmet avsluttet med feil, så kan du f.eks. i et batch script skrive IF ERRORLEVEL 1 GOTO SocketFailed GOTO End :SocketFailed ECHO Socket ga tilbake feil :End Lenke til kommentar
☀ ❄ Skrevet 7. august 2005 Del Skrevet 7. august 2005 det første er alltid fulle navnet til programmet C:\Windows\Calc.exe f.eks. Ikke heelt riktig -- dette er til en viss grad plattformavhengig. Under Linux blir argv[0] satt til kommandoen som ble kjørt for å starte programmet, enten det er relativ eller absolutt plassering. Lenke til kommentar
GeirGrusom Skrevet 7. august 2005 Del Skrevet 7. august 2005 Det visste jeg ikke.... takk. Lenke til kommentar
Kjeksen Skrevet 8. august 2005 Del Skrevet 8. august 2005 (endret) Jeg og har lurt litt nå en stund og starte med socket programmering. Noen anbefalinger av bøker for en som aldri har drevet med noen form for socket programmering før? - Jeg lurer også på en ting ang. return verdier. Jeg har sett noen ganger at -1 blir brukt istedenfor 0 og 1. Hva vil det si? Endret 8. august 2005 av Kjeksen Lenke til kommentar
☀ ❄ Skrevet 8. august 2005 Del Skrevet 8. august 2005 - Jeg lurer også på en ting ang. return verdier. Jeg har sett noen ganger at -1 blir brukt istedenfor 0 og 1. Hva vil det si? Ingenting. 0 betyr riktig utførelse, alt annet betyr gal utførelse. Man kan velge at en vil representere feil med forskjellige tall for å kunne identifisere hva som gikk galt, eller man kan velge å si at feil er feil og returnere samme tall uansett hva, slik jeg valgte i mitt program. Lenke til kommentar
Gromguten Skrevet 9. august 2005 Forfatter Del Skrevet 9. august 2005 (endret) Hva betyr MAKEWORD(1, 1) ? Hva gjør det? Endret 9. august 2005 av Gromguten Lenke til kommentar
Dead_Rabbit Skrevet 9. august 2005 Del Skrevet 9. august 2005 http://msdn.microsoft.com/library/default....os/makeword.asp var det første jeg kom over da jeg søkte på MAKEWORD@google Lenke til kommentar
Orjanp Skrevet 9. august 2005 Del Skrevet 9. august 2005 det første er alltid fulle navnet til programmet C:\Windows\Calc.exe f.eks. Ikke heelt riktig -- dette er til en viss grad plattformavhengig. Under Linux blir argv[0] satt til kommandoen som ble kjørt for å starte programmet, enten det er relativ eller absolutt plassering. Er ikke det også avhengig av programmeringsspråk? Mener å huske at det er forskjell på java og c. Kan også være at jeg har brukt java på windows og c i linux. For de som ønsker en god bok, så har jeg ingen tips. Det beste tipset er å se på Beej guiden som er nevnt tidligere. Den er bra å ha som et utgangspunkt. Lenke til kommentar
☀ ❄ Skrevet 9. august 2005 Del Skrevet 9. august 2005 Er ikke det også avhengig av programmeringsspråk? Det kan godt hende. Jeg unngår Java i den grad det er mulig Lenke til kommentar
Gromguten Skrevet 9. august 2005 Forfatter Del Skrevet 9. august 2005 (endret) Hmm, har et lite problem her. Hva skal jeg linke til? har ingen filer på dataen som heter winsock32.lib eller noe sånt? Og hva er forskjellen på winsock 1 og 2? Hvordan "linker" man med Dev++? Får ikke svar på windows programmering delen på forumet. Endret 9. august 2005 av Gromguten Lenke til kommentar
GeirGrusom Skrevet 9. august 2005 Del Skrevet 9. august 2005 Det heter WSOCK32.lib, WINSOCK.dll er for 16-bit programmer. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå