Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
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


Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Le 18 offerte Amazon del weekend, senza ...
Galaxy S25 Ultra 512GB sotto i 1.000€ su...
Vi piace l'iPhone nero? Su Amazon sono s...
MacBook Air M4 16GB/256GB e 16GB/512GB s...
4 portatili per risparmiare tanto ed ess...
San Marino multa TikTok: non controllano...
Dreame e Roborock in saldo su Amazon: ro...
Pazzesco su Amazon: crollano i prezzi de...
La Corea del Sud vorrebbe costruire una ...
Rilasciati i primi risultati delle anali...
Robot umanoidi low cost? Unitree ci prov...
Non solo Rocket Lab, anche Avio potrebbe...
Chips Act UE: 41,5 milioni di euro a Eph...
Ryzen Threadripper 9000 al debutto il 31...
Nuovi coupon nascosti Amazon (aggiorname...
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: 17:13.


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