|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
connessioni client/server [c++]
sto cercanto di creare 2 programmi(un cliente e un server) in grado di collegarsi tra loro e scambiarsi informazioni ma sono rimasta un pò bloccata:
codice server: #include <stdio.h> #include <stdlib.h> #include <afxsock.h> void main () { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { // Tell the user that we could not find a usable // WinSock DLL. return; } SOCKET srvsock = socket (AF_INET, SOCK_STREAM, 0); sockaddr_in SrvSAddr, ConnectAddr; SrvSAddr.sin_family = AF_INET; SrvSAddr.sin_addr.s_addr = htonl (INADDR_ANY); SrvSAddr.sin_port = htons (7000); bind (srvsock, (sockaddr*)&SrvSAddr, sizeof (SrvSAddr)); listen(srvsock,5); //ciclo di attesa per ricevere una connesione(aspetta in eterno) while (1) { int Addrlen = sizeof(ConnectAddr); SOCKET newsock = accept (srvsock, (sockaddr*)& ConnectAddr, &Addrlen); //riceve la connesione HANDLE connesso; CreateThread(NULL,NULL,connesso,&newsock,0,0); // connesso = nuovo Thread recv(socket,char *buff,50,0); // Và nel thread e riceve i dati dal "Client" } closesocket(srvsock); } questo invece è il codice a cui per ora sono arrivata del client(questo è proprio trascurato): #include <stdio.h> #include <stdlib.h> #include <afxsock.h> void main () { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { // Tell the user that we could not find a usable // WinSock DLL. return; } SOCKET Socket = socket(AF_INET, SOCK_STREAM,0); sockaddr_in ClientSocket; ClientSocket.sin_addr.s_addr = inet_addr ("192.168.255.11"); ClientSocket.sin_port = htons (7000); connect(Socket, (sockaddr*)& Socket, sizeof(Socket) ); printf("Connessione stabilita"); closesocket(Socket); } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per provare se il server funziona connettiti con telnet all'indirizzo (tutti i locali a quanto sembra) e alla porta che usi nel codice...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
recv(socket,char *buff,50,0); // Và nel thread e riceve i dati dal "Client"
Questa istruzione non è corretta... buff va anche allocato... |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
ok grazie,
#include <stdio.h> #include <afx.h> #include <winbase.h> #include <winsock.h> #include <afxsock.h> char buff[512]; DWORD WINAPI connect(LPVOID newsock) { SOCKET *newsock2 = (SOCKET*)newsock; recv(*newsock2,buff,sizeof(buff),0); // Và nel thread e riceve i dati dal "Client" printf("%s",buff); return 0; } void main () { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { // Tell the user that we could not find a usable // WinSock DLL. return; } SOCKET srvsock = socket (AF_INET, SOCK_STREAM, 0); sockaddr_in SrvSAddr, ConnectAddr; SrvSAddr.sin_family = AF_INET; SrvSAddr.sin_addr.s_addr = htonl (INADDR_ANY); SrvSAddr.sin_port = htons (7000); bind (srvsock, (sockaddr*)&SrvSAddr, sizeof (SrvSAddr)); listen(srvsock,5); HANDLE connesso; //ciclo di attesa per ricevere una connesione(aspetta in eterno) while (1) { int Addrlen = sizeof(ConnectAddr); SOCKET newsock = accept (srvsock, (sockaddr*)& ConnectAddr, &Addrlen); //riceve la connesione connesso = CreateThread(NULL,NULL,connect,&newsock,0,0); // connesso = nuovo Thread } closesocket(srvsock); } e ora? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai provato con il telent per vedere se funziona ? Puoi benissimo usare un debugger per vedere cosa avviene passo passo nel codice... Da una parte il debugger ti si ferma sulla accept...eppena avvii una connessione con telnet in questo modo:
telnet 127.0.0.1 7000 A questo punto il debugger va oltre la accept e vedi eventualmente dove sta il problema... |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
è che mancano proprio delle parti sulla comunicazine, manca il therad e non so come farlo(utilizarlo) proprio a livello di codice
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
Codice:
//Server
#include <stdio.h>
#include <afx.h>
#include <winbase.h>
#include <winsock.h>
#include <afxsock.h>
char buffD[512]= "Disconnesso";
char buffC[512]= "Connesso";
DWORD WINAPI connect(LPVOID newsock)
{
char buffer[512];
int i, ch;
SOCKET *NewSock=(SOCKET*)newsock;
while(strcmp(buffer,"Esc")!=0)
{
recv(*NewSock,buffC,512,0);
if(strcmp(buffC,"Esc")==0)
{
printf("Disconnessione avvvenuta\n");
system("cls");
return 0;
}
printf( "Client:\n%s\n",buffC );
for( i = 0; (i < 80) && ((ch = getchar()) != EOF) && (ch != '\n');i++ )
buffer[i] = (char)ch;
buffer[i] = '\0';
send(*NewSock,buffer,sizeof(buffer),0);
}
printf("Disconnessione avvvenuta\n");
return 0;
}
void main ()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
// Tell the user that we could not find a usable
// WinSock DLL.
return;
}
SOCKET srvsock = socket (AF_INET, SOCK_STREAM, 0);
sockaddr_in SrvSAddr, ConnectAddr;
SrvSAddr.sin_family = AF_INET;
SrvSAddr.sin_addr.s_addr = htonl (INADDR_ANY);
SrvSAddr.sin_port = htons (7000);
if(bind (srvsock, (sockaddr*)&SrvSAddr, sizeof (SrvSAddr))== SOCKET_ERROR)
printf("\nbind fallito");
if(listen(srvsock,5) == SOCKET_ERROR)
printf("\nlisten falito");
int Addrlen = sizeof(ConnectAddr);
HANDLE connesso;
//ciclo di attesa per ricevere una connesione(aspetta in eterno)
while (1)
{
SOCKET newsock = accept (srvsock, (struct sockaddr*)& ConnectAddr, &Addrlen); //riceve la connesione
send(newsock,buffC,sizeof(buffC),0);
connesso = CreateThread(NULL,NULL,connect,&newsock,0,0); // connesso = nuovo Thread
CloseHandle(connesso);
}
closesocket(srvsock);
}
Ultima modifica di cionci : 20-10-2005 alle 10:51. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma ora il problema dove sta ?
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:44.



















