04. september 2001 - 16:34Der er
13 kommentarer og 1 løsning
Linux Socket/ winsock.h
jeg har lavet et lille socket program i linux og det virker ved at sende en streng fra clienten til serveren. Men nu skal jeg prøve fra en windows client til linux server og det virker ikkke den kan ikke få connection. Mit client program kører jeg i borland og programmet kan godt compile men kan ikke connecte til linux serveren Det burde da ikke have noget at sige at den ene kører windows og den anden linux vel ?
den virker helt fint når både klient og server er på linux. Det forgår på skolen så det kan godt være at det er firewall\'en der er skyld i det. Måske kan det også være at win98 køre på en server og linux/unix kører på en anden server ? Virker lidt mystisk
prøv at teste om du kan connecte fra en windows maskine til dit linux program ved at telnette til den på den port din linux lytter på. Kan du ikke det, er det enten et spørgsmål om åbning af porte, eller 2 forskellige Lan hvor du sidder med de interne ip adresser. Hvis du kan telnette din linux på den port du vil, så er der noget galt med din win client.
prøv lige at teste (for at være helt sikker), at sockfd != INVALID_SOCKET efter dit kald til: sockfd=socket(AF_INET,SOCK_STREAM,0); du kunne også prøve at være specifik i protokolvalget i dit kald til socket.
du kan se protokollernes defines her:
/* * Protocols */ #define IPPROTO_IP 0 /* dummy for IP */ #define IPPROTO_ICMP 1 /* control message protocol */ #define IPPROTO_IGMP 2 /* internet group management protocol */ #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */ #define IPPROTO_TCP 6 /* tcp */ #define IPPROTO_PUP 12 /* pup */ #define IPPROTO_UDP 17 /* user datagram protocol */ #define IPPROTO_IDP 22 /* xns idp */ #define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
#define IPPROTO_RAW 255 /* raw IP packet */ #define IPPROTO_MAX 256
istedet for at teste på if(result==-1) test istedet på if(result==SOCKET_ERROR)
det var lidt småting jeg lige ville undersøge. Thue
1)recv fejler hvis data ikke er tilgængelig endnu og socket er non-blocking, men sockets er som regel per default lavet som blocking sockets, så recv skulle stå og hænge indtil data kommer.
2)Den er gal med din \"flags\" parameter i recv recv (sockfd,ch,100,100); flags parametren er den sidste hvor du angiver 100 ?? :)
det var den f...... recv(MSG_PEEK) Hvis jeg undlod de 100 skrev den compiler fejl at der manglede men jeg kunne ikke finde i nogle bøger hvor recv() havde 4 parametere den stod kun med tre lige som man bruger i Linux
hold kæft hvor er jeg god øøøh, også eksperten se\'fø\'lig :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.