Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-11-2009, 22: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, 22: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, 22: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, 06: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, 13: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, 15: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, 21: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, 22: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 12:28.
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2009, 14: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, 15: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 16:02.
4ndr34s è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
Black Friday Amazon: la GeForce RTX 5070...
EcoFlow, il Black Friday porta grande ri...
Gli sconti più pesanti del Black ...
Smart #5 BRABUS segna il nuovo record di...
Incentivi auto elettriche 2025, a volte ...
Oura apre una maxi disputa sui brevetti ...
Tre gruppi criminali si uniscono e crean...
BMW iX3: la Neue Klass supera i 1.000 km...
LinusTechTips pensa che Steam Machine do...
Black Friday Amazon: avviatori auto e ac...
Warner e Udio depongono le armi: l'IA di...
Snapdragon 8 Gen 5: il nuovo processore ...
Black Friday OPPO: prezzi a picco su sma...
Arriva il nuovo Amazon Haul per il Black...
Mafia: Terra Madre: arriva il Free Ride ...
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: 15:33.


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