Avatar billede mickni33 Nybegynder
04. september 2001 - 16:34 Der 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 ?
Avatar billede henrik_ffc Nybegynder
04. september 2001 - 17:35 #1
Nej det er ligegyldigt.

Er maskinerne på samme LAN?
Check at du ikke har en firewall installeret!
Check at porten er åben!!!

Kan du connecte, hvis du kører en linuxversion af clienten direkte på serveren,
altså connecter med localhost på linux serveren?
Avatar billede mickni33 Nybegynder
04. september 2001 - 19:54 #2
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
Avatar billede henrik_ffc Nybegynder
04. september 2001 - 21:41 #3
Det lyder som om der ikke er åbnet på porten et eller andet sted i nettet.
Hvis det er inde på NB lyder dette også sandsynligt
Avatar billede tuxen Nybegynder
04. september 2001 - 22:29 #4
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.

Thue
Avatar billede mickni33 Nybegynder
05. september 2001 - 07:44 #5
tuxen>>
den må jeg lige prøve, det lyder som en god test
Avatar billede mickni33 Nybegynder
05. september 2001 - 09:09 #6
kunne godt telnette min linux fra win98.....hmmm
Mærkeligt

min win client

  #include <sys/types.h>
#include <stdio.h>
#include <winsock.h>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>

int main(){
WSADATA info;
if(WSAStartup(MAKEWORD(1,1),&info) !=0)
MessageBox(NULL,\"Cannot initialize winsock\",\"WSAStartup\",MB_OK);

int    sockfd;
int    result;
int    len;
struct    sockaddr_in address;
char    x;
char    ch[100];

    sockfd=socket(AF_INET,SOCK_STREAM,0);
    address.sin_family=AF_INET;
    address.sin_family=AF_INET;
    address.sin_addr.s_addr=htonl(INADDR_ANY);
    address.sin_port=htons(33333);
    len=sizeof(address);
    result=connect(sockfd,(struct sockaddr*)&address,len);
        if(result==-1){
        perror(\"FEJL INGEN FORBINDELSE\");
        exit(1);
        }
            //write(sockfd,&ch,100);
            recv (sockfd,ch,100,100);
            cout<<\"MODTAGET AF SERVER \"<<ch;

closesocket(sockfd);
getch();
return 0;
}
Avatar billede mickni33 Nybegynder
05. september 2001 - 09:11 #7
den udskriver på skærmen
FEJL INGEN FORBI.....
dvs result=connect(sockfd,(struct sockaddr*)&address,len);

returnerer -1
Avatar billede mickni33 Nybegynder
05. september 2001 - 09:26 #8
address.sin_addr.s_addr=htonl(INADDR_ANY);

hej var fejlen der skulle stå server ip på begge sider så virker det.....næsten..
address.sin_addr.s_addr=htonl(\"172.16.16.211\");

nu vil den bare ikke udskrive strengen den viser bare noget volapyk tegn.
recv (sockfd,ch,100,100);

lav lige et svar fra jer begge
Avatar billede tuxen Nybegynder
05. september 2001 - 09:56 #9
Hejsa.

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
Avatar billede tuxen Nybegynder
05. september 2001 - 09:59 #10
ja for pokker da ! he he ellers ved den ikke hvad den skal spørge efter ude på netværket hvis ikke den kender serverens adresse.

...
Den havde jeg fuldstændig overset.
:)

Thue
Avatar billede mickni33 Nybegynder
05. september 2001 - 10:45 #11
Programmet kører og der er kontakt.. men der kommer sku ikke noget igennem..ikke engange en simpel textstreng
Avatar billede tuxen Nybegynder
05. september 2001 - 10:57 #12
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 ?? :)

Angiv istedet MSG_PEEK
recv (sockfd,ch,100,MSG_PEEK);

du læser med recv med deoptions der er sat forden socket du læser på + de flags de sætter i recv.

Thue
Avatar billede mickni33 Nybegynder
05. september 2001 - 11:17 #13
GENIIIIIIIIIIAAAAAAAAALLT
GENIIIIIIIIIIAAAALLLTT
hurra, hurra

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 :-)
Avatar billede tuxen Nybegynder
05. september 2001 - 11:22 #14
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester