PDA

View Full Version : [Java ]Socket Client/Server


melarco
07-11-2008, 19:31
Salve a tutti !!
Sto cercando di realizzare un programma che crei un Server che riceve un semplice messaggio e lo stampi ;ma ho alcuni dubbi:
Utilizzando il multithreading posso eseguire Server e client sulla stessa macchina???
Consentitemi di postare il codice per farmi capire meglio:

Questo è il server
import java.io.IOException;
import java.io.InputStream;

import java.net.ServerSocket;
import java.net.Socket;


public class ServerClient {


public static void main(String[] args)throws IOException {


ServerSocket ss = new ServerSocket(2000);//creare una ServerSocket ed attendere connessioni in ingresso:

Socket s = ss.accept();
Client client=new Client();
client.start();


InputStream in = s.getInputStream();
int readbyte = in.read();
while (readbyte >= 0) {
System.out.print((char)readbyte);
readbyte = in.read();

}

}
}

Questo è il client

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;


public class Client extends Thread{


public void run(){
System.out.println("pippo baudo");
String message = "Messaggio di prova";
try{
Socket c = new Socket("127.0.0.1",2000);
OutputStream out = c.getOutputStream();
out.write(message.getBytes());
out.close();
c.close();
}
catch(IOException exc){
System.out.println("eccezione");

}



}
}
Quando eseguo il programma il server sembra funzionare
ma il run del client nn viene esguito
Sapreste aiutarmi????
grazie un saluto a tutti

Tommy
08-11-2008, 08:29
Se il run non ti viene eseguito per niente, nemmeno le prime due istruzioni è perchè non lo "starti" essendo un thread..

Oceans11
08-11-2008, 08:29
Intanto indento il codice al posto tuo...

Server:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerClient {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(2000);
Socket s = ss.accept();
Client client=new Client();
client.start();
InputStream in = s.getInputStream();
int readbyte = in.read();
while (readbyte >= 0) {
System.out.print((char)readbyte);
readbyte = in.read();
}
}
}

Client:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client extends Thread {
public void run() {
System.out.println("pippo baudo");
String message = "Messaggio di prova";
try {
Socket c = new Socket("127.0.0.1",2000);
OutputStream out = c.getOutputStream();
out.write(message.getBytes());
out.close();
c.close();
}
catch(IOException exc) {
System.out.println("eccezione");
}
}
}

Oceans11
08-11-2008, 08:38
allora...qui il problema è che il server si blocca nell'esecuzione della riga Socket s = ss.accept(); che per l'appunto è bloccante, quindi una soluzione (provvisoria e sgangherata a pare mio) è quella di dichiarare, inizializzare e far partire il client prima di quella istruzione.

melarco
08-11-2008, 08:48
Ok ho capito quale era il problema!!!
Questo programmino è solo un primo approccio a questo tipo di classi...
Comunque grazie sei stato molto gentile
ciao