Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
L'elettrica di casa Hyundai propone una versione AWD con estetica derivata dalla famiglia N. L'abbiamo provata per diversi giorni, per scoprire tutti i dettagli e la vera autonomia in autostrada
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-11-2009, 21:30   #1
4ndr34s
Member
 
Iscritto dal: Dec 2007
Messaggi: 224
[C\C++]Chat C++

Salve a tutti, ho una chat scritta in c++ vorrei sapere come è possibile prendere l'ip della persona che invia il messaggio al server?
Questo è il codice:
Server:
Codice PHP:
#include <vector>
#include <ctime>
#include "Socket.h"

using namespace std;

struct mClient SOCKET socketstring nick; };

DWORD WINAPI AcceptConnection(LPVOID Parameter);
DWORD WINAPI Receive(LPVOID Parameter);

void StartListenClient(Socket *s);
bool _Receive(mClientc);
void SendToAll(const charmessage);
void SendOne(const charmessage,SOCKET s);
bool ExistNick(string nick);

vector<SOCKET>::iterator retpos(SOCKET s);
vector<string>::iterator _retpos(string s);
vector<SOCKETCLIENT;
vector<stringNICK;


int main()
{
    try {
        
SetConsoleTitle("cChat - Server");
        
DWORD mThread;
        
string ip="127.0.0.1";
        
cout<<"Inizializzazione in corso...\n";
        
Socketserver= new Socket(ip,8585);
        
server->Bind();
        
server->Listen(10);
        
cout<<"Inizializzazione completata!\n"
            
<<"Server pronto a ricevere connessioni sulla porta 8585.\n"
            
<<"==> Scrivere ::quit per stoppare il server <==\n"
            
<<"======================================================\n";

        
CreateThread(NULL,0,AcceptConnection,server,0,&mThread);
        
string a,send="";
        while(
a!="::quit\n") {
            
getline(cin,a,'\n');
            
a+="\n";
            
send "::server:: "+a;
            
SendToAll(send.c_str());
            
fflush(stdin);
        }
    }catch(
SocketException s) {
        
cout<<s.ErrorMessage();
    }
    return 
0;
}

DWORD WINAPI AcceptConnection(LPVOID Parameter) {
    
Socket *s=(Socket*)Parameter;
    while(
1)
        
StartListenClient(s);
    return 
0;
}

void StartListenClient(Socket *s) {
    
DWORD mThread;
    
SOCKET ss;
    
string nick="Banned User";
    
ss=s->Accept();
    if(
ss!=INVALID_SOCKET) {
        
CLIENT.push_back(ss);
        
NICK.push_back(nick);
        
mClient *= new mClient;
        
c->socket=ss;
        
c->nick=nick;

        
CreateThread(NULL,0,Receive,(void*)c,0,&mThread);
        
cout<<"Client connesso!\n";
   }
}

DWORD WINAPI Receive(LPVOID Parameter) {
    
mClient *c=(mClient*)Parameter;
    while(
1)
        if(
_Receive(c)) break;
    return 
0;
}

bool _Receive(mClientc) {
    
string value="";
    
char buff[4096]="";
    
char timebuff[9]="";
    
int ret=0;
    
ret recv(c->socket,buff,sizeof(buff)+1,0);
    if(
ret!=-1) {
        
value+="[";
        
value+=_strtime(timebuff);
        
value+="] ";
        
value+="<";
        
value+=c->nick;
        
value+="> ";
        
value+=buff;
        
value+='\n';
        
cout<<value;
        
cout<<"\n"<<buff;
        
SendToAll(value.c_str());
        return 
0;
    }else {
        
CLIENT.erase(retpos(c->socket));
        
NICK.erase(_retpos(c->nick));
        return 
1;
    }
}

void SendToAll(const charmessage) {
    
vector<SOCKET>::iterator i;
    
vector<string>::iterator j;
    for(
i=CLIENT.begin(),j=NICK.begin();i!=CLIENT.end();i++,j++) {
        if(
send(*i,message,strlen(message)+1,0) == -1) {
            
CLIENT.erase(i);
            
NICK.erase(j);
        }
    }

}

void SendOne(const charmessage,SOCKET s) {
    
send(s,message,strlen(message)+1,0);
}

bool ExistNick(string nick) {
    
vector<string>::iterator it;
    for(
it=NICK.begin();it!=NICK.end();it++)
        if(*
it == nick) return true;
    return 
false;
}

vector<SOCKET>::iterator retpos(SOCKET s) {
    
vector<SOCKET>::iterator it;
    for(
it=CLIENT.begin();it!=CLIENT.end();it++)
        if(*
it == s) break;

    return 
it;
}

vector<string>::iterator _retpos(string s) {
    
vector<string>::iterator it;
    for(
it=NICK.begin();it!=NICK.end();it++)
        if(*
it == s) break;

    return 
it;

Client:
Codice PHP:
#include "Socket.h"

using namespace std;

DWORD WINAPI Receive(LPVOID Parameter);

int main()
{
    try {
        
SetConsoleTitle("cChat - Client");
        
DWORD mThread;
        
string address="127.0.0.1";
        
//cout<<"Inserisci l'indirizzo del server: ";
        
Socket *s=new Socket(address,8585);
        
s->Connect();
        
cout<<"\nConnessione al server effettuata !"
            
<<"\n===> Scrivi ::quit per uscire <===\n"
            
<<"=====================================\n\n";
        
CreateThread(NULL,0,Receive,s,0,&mThread);
        
string a="Ban me I'm hacking";
        
//cout<<"Inserisci il nick: ";
        //getline(cin,a,'\n');
        //s->Send(a,a.length());
        
s->Send(a,a.length());
        
/*while(a!="::quit") {
            //getline(cin,a,'\n');
            if(a!="::quit")
                if(s->Send(a,a.length())==-1) {
                    cout<<"Connessione al server caduta!"<<endl;
                    break;
                }
        }*/
    
}catch(SocketException e) {
        
cout<<e.ErrorMessage()<<endl;
    }
    return 
0;
}

DWORD WINAPI Receive(LPVOID Parameter) {
    
Socket *s=(Socket*)Parameter;
    
string p="";
    while(
1) {
        if(
s->Receive(p)!=-1) {
            
cout<<p;
            
p.clear();
        }else break;
    }
    return 
0;

__________________
My Computer:
MotherBoard:Asus P5Q SE \ Ram:Crossair DDR2 800 Mhz \ CPU:Intel Dual Core E5200 2500Ghz \ Scheda Video: Nvidia GeForce 9600GT Zotac
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2009, 21:48   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Supponendo che tu stia usando i socket bsd c'è la funzione getpeername.

Ah un consiglio sulle eccezioni usa i riferimenti, meglio ancora un const reference.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2009, 21:48   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
http://www.linuxmanpages.com/man2/getpeername.2.php
http://www.linuxmanpages.com/man2/getsockname.2.php
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2009, 05:52   #4
4ndr34s
Member
 
Iscritto dal: Dec 2007
Messaggi: 224
Sapreste dirmi come e dove la dovrei collolare nel codice?
non tanto mi è chiaro come funziona.
__________________
My Computer:
MotherBoard:Asus P5Q SE \ Ram:Crossair DDR2 800 Mhz \ CPU:Intel Dual Core E5200 2500Ghz \ Scheda Video: Nvidia GeForce 9600GT Zotac
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2009, 12:07   #5
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 4ndr34s Guarda i messaggi
Sapreste dirmi come e dove la dovrei collolare nel codice?
non tanto mi è chiaro come funziona.
Dove collocarla dipende anche dal punto in cui vuoi consocere i dati, potresti anche pensare di aggiugnerla alla classe Socket.
Per il funzionamento richiede in ingresso il descrittore del socket (che nel tuo caso mi sembra essere la varibile socket della classe Socket), il puntatore a una struttura sockaddr_in e il puntatore alla dimensione di sockaddr_in, in uscita ti troverai i dati dell'ip e della porta del socket remoto.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2009, 14:06   #6
4ndr34s
Member
 
Iscritto dal: Dec 2007
Messaggi: 224
io vorrei collocarla nel lato server, dove riceve il messaggio :
Codice PHP:
bool _Receive(mClientc) {
    
string value="";
    
char buff[4096]="";
    
char timebuff[9]="";
    
int ret=0;
    
ret recv(c->socket,buff,sizeof(buff)+1,0);
    if(
ret!=-1) {
        
value+="[";
        
value+=_strtime(timebuff);
        
value+="] ";
        
value+="<";
        
value+=c->nick;
        
value+="> ";
        
value+=buff;
        
value+='\n';
        
cout<<value;
        [
i][u][b]cout<<"\n"<<ip QUi!;[/b][/u][/i]
        
SendToAll(value.c_str());
        return 
0;
    }else {
        
CLIENT.erase(retpos(c->socket));
        
NICK.erase(_retpos(c->nick));
        return 
1;
    }

__________________
My Computer:
MotherBoard:Asus P5Q SE \ Ram:Crossair DDR2 800 Mhz \ CPU:Intel Dual Core E5200 2500Ghz \ Scheda Video: Nvidia GeForce 9600GT Zotac
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2009, 20:53   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Io aggiungerei un elemento alla struct mClient da valorizzare dopo l'Accept per evitare di calcolare tutte le volte l'informazione.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2009, 21:44   #8
4ndr34s
Member
 
Iscritto dal: Dec 2007
Messaggi: 224
Edit4: ok ora funziona alla grande, grazie miller per l'aiuto datomi.
Unico Problema: non riesco a linkare le librerie in VC++ 6 come faccio?
dovrei linkare questa libreria libws2_32.a ma ho notato che non è neanche presente nella cartelle delle librerie del visual c, come faccio?
__________________
My Computer:
MotherBoard:Asus P5Q SE \ Ram:Crossair DDR2 800 Mhz \ CPU:Intel Dual Core E5200 2500Ghz \ Scheda Video: Nvidia GeForce 9600GT Zotac

Ultima modifica di 4ndr34s : 22-11-2009 alle 11:28.
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2009, 13:49   #9
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 4ndr34s Guarda i messaggi
Edit4: ok ora funziona alla grande, grazie miller per l'aiuto datomi.
Unico Problema: non riesco a linkare le librerie in VC++ 6 come faccio?
dovrei linkare questa libreria libws2_32.a ma ho notato che non è neanche presente nella cartelle delle librerie del visual c, come faccio?
Io direi che devi linkare ws2_32.lib

Scusa ma perchè stai usando un compilatore di 11 anni fa?
Usa VisualStudio 2008 Express che è un altro mondo (meglio ancora VS2010 Beta2).
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2009, 14:58   #10
4ndr34s
Member
 
Iscritto dal: Dec 2007
Messaggi: 224
Quanto sono fesso xD
certe volte....
io avevo copiato e incollato il codice in visual c ma non avevo aggiunto i file del progetto di code block nel progetto del visual e quindi dava tutti quei errori xD
grazie mille per l'aiuto
__________________
My Computer:
MotherBoard:Asus P5Q SE \ Ram:Crossair DDR2 800 Mhz \ CPU:Intel Dual Core E5200 2500Ghz \ Scheda Video: Nvidia GeForce 9600GT Zotac

Ultima modifica di 4ndr34s : 22-11-2009 alle 15:02.
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Mille satelliti per alimentare l'AI: il ...
Energia infinita dagli oceani? Questo na...
Hacker fingono di essere il supporto IT ...
Samsung abbatte il muro dei 10 nanometri...
70mai A410 a 79,99€: la dashcam doppia a...
La US Navy ha testato il laser anti-dron...
Portatile HP 15'' con Ryzen 3 7320U e SS...
Non è Netflix la piattaforma di s...
BYD alla Milano Design Week: quando la &...
2 smart TV da 65'' QLED sono crollate di...
GeForce in offerta: PNY RTX 5080 o MSI R...
Una delle scope elettriche più richieste...
6 Smart TV LG 2025 in offerta: OLED da 6...
ZAM, la nuova memoria Intel riceve fondi...
Fino a 5 anni di reclusione per un'immag...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:55.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v