Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Socket in D
Forum - Altri Linguaggi - Socket in D

Avatar
^JAVA^ (Ex-Member)
Pro


Messaggi: 93
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 18:41
Venerdì, 30/05/2008
Ciao raga come va?
Dovrei creare un programma (Client/Server) in D(in ambiente Linux),potete dirmi che librerie devo includere?
Ciao.

PM Quote
Avatar
Dax89 (Member)
Expert


Messaggi: 283
Iscritto: 07/04/2007

Segnala al moderatore
Postato alle 19:13
Venerdì, 30/05/2008
Ciao!
Allora questo è un client

Codice sorgente - presumibilmente Java

  1. import std.stdio;  //Libreria standard
  2. import std.socket; //Per usare i socket in D
  3.  
  4. int main(string[] args)
  5. {
  6.         //Istanzio la classe TcpSocket
  7.         TcpSocket sock = new TcpSocket();
  8.  
  9.         //new InternetAddress(indirizzo, porta)
  10.         sock.connect(new InternetAddress("www.indirizzo.it", 8080));
  11.  
  12.         //Invio testo
  13.         sock.send("Testo");
  14. }



Per il server dovrebbe essere più o meno così (ancora non ne ho mai fatto uno :-|):

Codice sorgente - presumibilmente Java

  1. import std.stdio;
  2. import std.socket;
  3.  
  4. int main(string[] args)
  5. {
  6.         char[255] buffer;
  7.        
  8.         //Istanzio la classe TcpSocket
  9.         TcpSocket sock = new TcpSocket();
  10.  
  11.         //E' possibile omettere l'indirizzo perchè
  12.         //c'è un costruttore che accetta solo la porta
  13.         //e come indirizzo prende quello del pc.
  14.         sock.bind(new InternetAddress(8080));
  15.         sock.listen(1);
  16.  
  17.         //Accetto la connessione in ingresso
  18.         TcpSocket client = sock.accept();
  19.  
  20.         //Ricevo i dati inviati
  21.         client.receive(buffer);
  22. }



:k:

PM Quote
Avatar
^JAVA^ (Ex-Member)
Pro


Messaggi: 93
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 23:29
Venerdì, 30/05/2008
Innanzitutto grazie funziona quasi tutto perchè quando provo a visualizzare l' array di char(buffer) del server mi da invalid UTF-8.
Ciao.

PM Quote
Avatar
Dax89 (Member)
Expert


Messaggi: 283
Iscritto: 07/04/2007

Segnala al moderatore
Postato alle 15:19
Sabato, 31/05/2008
mmmh, si anche io ho ogni tanto quel problema, devo ancora capire perchè...
Prova a cambiare il tipo del buffer in ubyte ad esempio.
Oppure, quando stampi su schermo fai:

Codice sorgente - presumibilmente Altri Linguaggi

  1. import std.string; //Importa questo modulo aggiuntivo.
  2.  
  3. char[255] buffer; //Il buffer dove vengono messi i dati ricevuti
  4.  
  5. //buffer.ptr è come &buffer (puoi usare entrambi i metodi)
  6. writefln("%s", std.string.toString(buffer.ptr));



Non sono sicuro che funzioni comunque 8-|

Ultima modifica effettuata da Dax89 il 31/05/2008 alle 15:20
PM Quote
Avatar
^JAVA^ (Ex-Member)
Pro


Messaggi: 93
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 16:15
Sabato, 31/05/2008
Ciao, ho provato a fare come mi hai detto te ma non va lo stesso, dando un occhiata al sito della Digital Mars sono riuscito a risolvere:
Client:
_________________________
import std.stdio;  //Libreria standard
import std.socket; //Per usare i socket

void main(string[] args)
{
    //Istanzio la classe TcpSocket
    TcpSocket sock = new TcpSocket();

    //new InternetAddress(indirizzo, porta)
    sock.connect(new InternetAddress("IP", porta));
   char[]str="Hello Socket!";
    //Invio testo
    sock.send(cast(ubyte[])str);//Lo converto in ubyte
sock.close();//Chiudo la socket
}
Server:
____________________________________
import std.stdio;
import std.socket;
void main(string[] args)
{
    ubyte[] buffer=new ubyte[255];
    
    
    TcpSocket sock = new TcpSocket();//Istanzio la classe TcpSocket

    //E' possibile omettere l'indirizzo perchè
    //c'è un costruttore che accetta solo la porta
    //e come indirizzo prende quello del pc.
    sock.bind(new InternetAddress(Porta));
    sock.listen(1);    

    

Socket serv=sock.accept();//Accetto la connessione in ingresso
    
    serv.receiveFrom(buffer);//Ricevo i dati inviati e li immagazziono in un buffer
    writefln(cast(string)buffer);//Li stampo a video
sock.close();//Chiudo i socket
serv.close();
}

Grazie e Ciao!!!

Ultima modifica effettuata da ^JAVA^ il 31/05/2008 alle 16:17
PM Quote