View Full Version : [C++]Socket
In questo cod mi da errore di Acesso:(:(
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <IniFiles.hpp>
#include <ScktComp.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
int port, maxclient;
#pragma argsused
int main(int argc, char* argv[])
{
TIniFile * ini = new TIniFile(ChangeFileExt(Application->ExeName,".ini"));
port = ini->ReadInteger("Server", "Port", 5000);
maxclient = ini->ReadInteger("Server", "MaxClient", 10);
delete ini;
int loop = 1;
TServerSocket * s;
s->Active = false;
s->Port = port;
s->Active = true;
// ----------
while(loop)
{
AnsiString txt = s->Socket->ReceiveText();
cout << txt.c_str() <<endl;
s->Socket->SendText(txt);
txt = "";
cin >> loop;
}
delete s;
return 0;
}
//---------------------------------------------------------------------------
Help meeeeeeeeeeeeeeeeeeee:cry:
Tnk
ilsensine
12-12-2003, 07:43
TIniFile * ini = new TIniFile(ChangeFileExt(Application->ExeName,".ini"));
port = ini->ReadInteger("Server", "Port", 5000);
(...)
TServerSocket * s;
s->Active = false;
Chi alloca s?
downloader
12-12-2003, 14:23
Ma sei impazzito!!!!:eek: :eekk:
Devi allocare s!!!
ServerSocket s = new ServerSocket(port);
In bocca al lupo ;)
quello lo ho risolto............pero qui o problemi:(
//---------------------------------------------------------------------------
void __fastcall TfrmMain::bSendClick(TObject *Sender)
{
sCl->Socket->SendText("CLIENT: " + tMsg->Text);
/*
Build a response but it isn't impossibyle because trhow an error
*/
AnsiString response("SERVER: ");
/*
Echoing the client text
*/
try
{
response += sSrv->Socket->ReceiveText(); // in this line receive text
rMsg->Lines->Add(response + "\n");
sSrv->Socket->Connections[0]->SendText(response); // send response to client
AnsiString srv_resp = sCl->Socket->ReceiveText();
rMsg->Lines->Add(srv_resp + "\n");
}
/*
Catch a socket errors
*/
catch(ESocketError &e)
{
if(Application->MessageBoxA("Error for probing connect!\nTerminate the program", "Connection Error", MB_ICONWARNING | MB_ICONERROR ) == ID_OK)
{
// terminate the application
std::exit(1);
}
}
}
Mi da sempre errore:(
downloader
12-12-2003, 15:27
Che tipo di errore ti da in compilazione o esecuzione?
Comunque suppongo esecuzione...
in questo caso ti chiedo: tu usi in un unico thread l'utilizzo di server socket e di client. Sei sicuro che siano in connessione? Che le porti che utilizzi non siano gia in uso?
Fammi sapere.
Originariamente inviato da downloader
Che tipo di errore ti da in compilazione o esecuzione?
Comunque suppongo esecuzione...
in questo caso ti chiedo: tu usi in un unico thread l'utilizzo di server socket e di client. Sei sicuro che siano in connessione? Che le porti che utilizzi non siano gia in uso?
Fammi sapere.
Uno solo.
Come supporta i thread il BCB????
Tnk 10000000000
x l'esattezza mi da questo errore:(
downloader
12-12-2003, 15:46
BCB intendi Borland C++Builder? Se è sì allora supporta i thread visto che è scritto per windows. Comunque dall'errore mi sembra che ci sia un problema di configurazione della classe server. Come l'hai inizializzata?
//---------------------------------------------------------------------------
void __fastcall TfrmMain::bConnClick(TObject *Sender)
{
// connect to server
TIniFile * ini = new TIniFile(ChangeFileExt(Application->ExeName,".ini"));
int port = ini->ReadInteger("Server", "Port", 6000);
AnsiString adr = ini->ReadString("Client", "Addr", "");
// server
sSrv->Port = port;
sSrv->Active = true;
// set te socket client
sCl->Port = port;
sCl->Address = adr;
sCl->Active = true;
// -------------
sbChat->Panels->Items[0]->Text = "Connessione a ";
sbChat->Panels->Items[0]->Text += adr;
rMsg->Lines->Add("CLIENT: Connessione a " + adr + "\n");
delete ini;
}
//---------------------------------------------------------------------------
downloader
12-12-2003, 16:12
addr ovviamente è l'indirizzo del server... giusto? Perkè se nn è così è sbagliato.
ascolta la tecnica che stai utilizzando potrebbe non essere efficiente... mi spiego. Tu su un click di pulsante fai mandare un messaggio ad un server che dalle righe di codice si capisce che potrebbe anche nn essere in ascolto.
Mi rispiego...
Se tu fai due programmini, uno client e l'altro server... starti il server che si mette in ascolto... poi col client premi il pulsante che invia il testo, vedi che così funziona.
Cosa succede a te? Io credo che succeda questo.
Cl->Sendmessage....
altre istruzioni ecc.
poi dopo fai server->ascolta... ma qui gia potrebbe essere tardi. In pratica il processo dovrebbe fallire sulla sendmessage che nn trova il server in ascolto....
Nn so se mi sono spiegato...:confused: ;)
PS: me ne devo andare nn so se ce la faccio a risponderti ancora... dovrei tornare a lunedì a lavoro, quindi riprenderei a risponderti lunedì. Se ci sono ancora però ti rispondo. In bocca al lupo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.