problem mit socket
-
@joomoo: das war der server

-
-
memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(23451); rc = addr.sin_addr.s_addr=inet_addr("xxx.xx.xx.xx"); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));x soll ne zahl sein

und dazwischen hab ich noch bisschen code weggelassen ich denke das ist das wichtigste..
-
der port ist der richtige gewesen.. ich habe ihn nur gerade falsch gepostet
beide stimmen also überein
-
socket*mark schrieb:
memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(23451); rc = addr.sin_addr.s_addr=inet_addr("xxx.xx.xx.xx"); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));x soll ne zahl sein

und dazwischen hab ich noch bisschen code weggelassen ich denke das ist das wichtigste..
sizeof() darfst du nicht die Größe der sockaddr übergebe, das wäre ja sinnlos, sondern die deiner Struktur, also sizeof(addr).
Vielleicht lag's aber auch nicht daran.
mfg.
-
nein daran lag es (leider) auch nicht. kennt vielleicht jemand einen sourcecode für einen server und einen clienten den man leicht benutzen/umschreiben kann? vielleicht liegt es am programm.
ich ging auch mal über telnet rein. den server findet er nur unter 127.0.0.1 nicht aber unter einer anderen adresse. also müsste das problem wenn schon am server liegen.
-
socket*mark schrieb:
nein daran lag es (leider) auch nicht. kennt vielleicht jemand einen sourcecode für einen server und einen clienten den man leicht benutzen/umschreiben kann? vielleicht liegt es am programm.
ich ging auch mal über telnet rein. den server findet er nur unter 127.0.0.1 nicht aber unter einer anderen adresse. also müsste das problem wenn schon am server liegen.
Wenn du dein gesamtes Programm postest, kann ich es ja mal ausprobieren ob es bei mir funktioniert. Denn ich glaube es liegt nicht an der Programmierung sondern an deinen System, oder so.
mfg.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich habe eigentlich von c-worker einen code.
naja ich poste mal beide:
client:
#include <stdlib.h> #include <stdio.h> #include <windows.h> #include <winsock2.h> #include <conio.h> int startWinsock() { int rc; WSADATA wsaData; rc=WSAStartup(MAKEWORD(2,0),&wsaData); printf("Return Code: %d\n",rc); if(rc==SOCKET_ERROR) { printf("Error, exiting!\n"); return rc; } return 0; } int main() { SOCKET s; SOCKADDR_IN addr; char c; char buf[1024]; char inpBuf[1024]; int inpBufPos=0; fd_set fdSetRead; TIMEVAL timeout; int rc; rc=startWinsock(); if(rc==SOCKET_ERROR) return 1; memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(45623); rc = addr.sin_addr.s_addr=inet_addr("217.95.167.54"); if(rc==SOCKET_ERROR) { printf("Error: Cannot resolve Host"); return 1; } s=socket(PF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Error, cannot create socket: %d\n",WSAGetLastError()); return 1; } printf("Connecting...\n"); rc=connect(s,(SOCKADDR*)&addr,sizeof(addr)); if(rc==SOCKET_ERROR) { printf("Error: connect failed: %d\n",WSAGetLastError()); return 1; } printf("\n"); while(rc!=SOCKET_ERROR) { while(kbhit()) { c=getch(); if(c==13) { rc=send(s,inpBuf,inpBufPos,0); inpBuf[0]='\0'; inpBufPos=0; } else { inpBuf[inpBufPos++]=c; } } inpBuf[inpBufPos]='\0'; FD_ZERO(&fdSetRead); FD_SET(s,&fdSetRead); timeout.tv_sec=0; timeout.tv_usec=0; while((rc=select(0,&fdSetRead,NULL,NULL,&timeout))>0) { rc=recv(s,buf,1023,0); if(rc==0) { printf("Server closed connection!\n"); return 1; } else if(rc==SOCKET_ERROR) { printf("Error: recv failed: %d\n",WSAGetLastError()); return 1; } buf[rc]='\0'; printf("%s\n",buf); } } closesocket(s); WSACleanup(); printf("Client shutdown, press any key to exit\n"); getch(); return 0; }server:
#pragma comment( lib, "ws2_32.lib" ) #include <windows.h> #include <winsock2.h> // bei manchan compilern muss man nur windows.h includieren (zB VC++) #include <stdio.h> #define MAX_CLIENTS 10 int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } int main() { long rc; SOCKET acceptSocket; SOCKADDR_IN addr; char buf[256]; char buf2[300]; FD_SET fdSet; SOCKET clients[MAX_CLIENTS]; int i; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(45623); addr.sin_addr.s_addr=INADDR_ANY; rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket an port 12345 gebunden\n"); } // In den listen Modus rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("acceptSocket ist im listen Modus....\n"); } for(i=0;i<MAX_CLIENTS;i++) { clients[i]=INVALID_SOCKET; } while(1) { FD_ZERO(&fdSet); FD_SET(acceptSocket,&fdSet); for(i=0;i<MAX_CLIENTS;i++) { if(clients[i]!=INVALID_SOCKET) { FD_SET(clients[i],&fdSet); } } rc=select(0,&fdSet,NULL,NULL,NULL); // nicht vergessen den ersten parameter bei anderen betriebssystem anzugeben if(rc==SOCKET_ERROR) { printf("Fehler: select, fehler code: %s\n",WSAGetLastError()); return 1; } if(FD_ISSET(acceptSocket,&fdSet)) { for(i=0;i<MAX_CLIENTS;i++) { if(clients[i]==INVALID_SOCKET) { clients[i]=accept(acceptSocket,NULL,NULL); printf("Neuen Client angenommen (%d)\n",i); break; } } } for(i=0;i<MAX_CLIENTS;i++) { if(clients[i]==INVALID_SOCKET) { continue; } if(FD_ISSET(clients[i],&fdSet)) { rc=recv(clients[i],buf,256,0); if(rc==0 || rc==SOCKET_ERROR) { printf("Client %d hat die Verbindung geschlossen\n",i); closesocket(clients[i]); clients[i]=INVALID_SOCKET; } else { buf[rc]='\0'; printf("Client %d hat folgendes gesandt: %s\n",i,buf); sprintf(buf2,"Du mich auch %s\n",buf); send(clients[i],buf2,(int)strlen(buf2),0); } } } } }ich denke auch, dass es am system liegt, nur an was genau weiß ich nicht. habe auch schonmal die firewall ausgeschaltet. ich denke mit linux hat man da nicht so große probleme

-
es könnte daran liegen, dass du hinter einem router steckst, der den port nicht an dich weiterleitet. Such mal in den Einstellungen von deinem Router nach etwas, das wie Virtual Server klingt.
Falls du nicht hintern einem Router bist, dann wird's wohl die Firewall sein.
mfg.
-
ich habe keinen router und die firewall habe ich auch schonmal ausgeschaltet und dann ausprobiert ob es geht
-
socket*mark schrieb:
ich habe keinen router und die firewall habe ich auch schonmal ausgeschaltet und dann ausprobiert ob es geht
Dann hast du wahrsch. ne falsche IP eingegeben. Wo hast du die IP denn her?
mfg.