Pages (10): « First ... « 2 3 4 5 [6] 7 8 9 10 » Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Reti di calcolatori (http://www.dsy.it/forum/forumdisplay.php?forumid=68)
-- [info] Appello 1 Aprile (http://www.dsy.it/forum/showthread.php?threadid=18271)
io devo dare l'esame domani, cmq ti posso dire per certo: lascia stare il multicast, non serve per fare un server multithread... sono due cose diverse.
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
ok, capisco...ma se domani mi trovo un server multithread in udp cosa faccio?
Qualcuno mi dice chiaramente se esiste o meno?
Io son sicuro che per fare server multithread si usa tcp che è più sicuro e viene meglio. Sinceramente pensavo che il server multithread in udp non esistesse proprio...Chi ha fatto gli appelli precedenti potrebbe illuminarci?
Grasias!!
__________________
guarda, ti posto il codice (non completo, manca l'elaborazione dei dati del pacchetto, che dipende da cosa è richiesto che faccia il server) di un server multithread udp che ho fatto ieri. questo metodo funziona da quello che ho potuto vedere, ma non mi assumo responsabilità circa la correttezza effettiva in quanto me lo sono inventato di sana pianta... auguri!
code:
import java.util.*; import java.net.*; import java.io.*; class engine extends Thread { byte incoming[]; SocketAddress sender; public engine(byte[] b, SocketAddress s) { incoming = b; sender = s; } public void run() { //...fˆ qualcosa coi dati in incoming byte tbuf[] = new byte[256]; String response = //...scrive la risposta tbuf = response.getBytes(); try{ //invia la risposta DatagramSocket tsock = new DatagramSocket(); DatagramPacket tpack = new DatagramPacket(tbuf, tbuf.length, sender); tsock.send(tpack); System.out.println("pacchetto inviato"); tsock.close(); }catch(Exception e){} } } public class udp_calc_multiser { public static void main (String args[]) { byte buf[] = new byte[256]; DatagramPacket pack = new DatagramPacket(buf, buf.length); try{ DatagramSocket UDPsocklistener = new DatagramSocket(4444); while(true){ UDPsocklistener.receive(pack); new engine(pack.getData(), pack.getSocketAddress()).start(); } }catch(Exception e){} } }
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
Grazieee UZI
__________________
r
io lo scorso appello ho avuto UDP...e l ultimo modulo..quello del multithread l ho lasciato bianco..appunto perchè...come ripeto...l udp dal mio punto di vista nn è stato propriamente visto a scuola....
cmq...sperem...
__________________
Break Out
la vedo grigia domani...
scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?
Originally posted by Vale
scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?
__________________
r
io per l'UDP ho fatto così che ne pensate?
import java.io.*;
import java.net.*;
public class ServerUDP{
private static DatagramSocket ss= null;
public static void main(String[] args){
try{
ss = new DatagramSocket(12000);
while (true){
byte[] recvData = new byte[1024];
DatagramPacket recvPacket = new DatagramPacket(recvData,recvData.length);
ss.receive(recvPacket);
ServerThreadUDP t= new ServerThreadUDP(ss,recvPacket);
t.start();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class ClientUDP{
private static DatagramSocket socket;
private static InputStreamReader reader;
private static BufferedReader myInput;
private static String LAFRASE= "La frase e':";
public static void main(String[] args){
try{
socket = new DatagramSocket();
InetAddress ipaddress=InetAddress.getByName("localhost");
System.out.println("inserisci la frase:");
reader = new InputStreamReader(System.in);
myInput = new BufferedReader(reader);
byte[] sendData = new byte[1024];
byte[] recvData = new byte[1024];
String frase= LAFRASE+myInput.readLine();
sendData=frase.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipaddress, 12000);
socket.send(sendPacket);
DatagramPacket recvPacket = new DatagramPacket(recvData, recvData.length);
socket.receive(recvPacket);
int c;
String recfrase="";
for (int i=0; (c=recvPacket.getData()[i])!=0; i++)
recfrase+= (char) c;
System.out.println("La frase in maiuscolo è :"+recfrase.substring(LAFRASE.length())+" di lunghezza: "+ (recfrase.length()-LAFRASE.length()));
String lung= "La lunghezza e'"+(recfrase.length()-LAFRASE.length())+"\n";
sendData= lung.getBytes();
sendPacket.setData(sendData);
sendPacket.setLength(sendData.length);
socket.send(sendPacket);
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.DatagramSocket;
public class ServerThreadUDP extends Thread {
private static DatagramSocket socket;
private static byte[] recvData;
private static byte[] sendData;
private static DatagramPacket recvPacket;
public ServerThreadUDP(DatagramSocket s, DatagramPacket recvPacket){
socket = s;
this.recvPacket = recvPacket;
recvData= new byte[1024];
sendData= new byte[1024];
}
public void run(){
try{
int c;
String frase="";
for (int i=0 ; (c=recvPacket.getData()[i])!=0; i++)
frase += (char) c;
System.out.println(frase);
InetAddress ipaddress =recvPacket.getAddress();
int porta = recvPacket.getPort();
frase= frase.toUpperCase();
sendData = frase.getBytes();
DatagramPacket sendPacket= new DatagramPacket(sendData, sendData.length, ipaddress, porta);
socket.send(sendPacket);
}catch(Exception e){
e.printStackTrace();
}
}
}
grazie del codice....mi ci vorra un secolo per decriptarlo....
nota di redazione...nn c ho capito na randazza di mazza...
__________________
Break Out
é lo stesso esercizio che ha fatto Flavia però in Udp?
Grazie!
__________________
r
guarda, io ti spiego alcune mie considerazioni, prendile con le pinze perchè non fanno riferimento a materiale didattico (che non c'è, o quantomeno non i è stato fornito) ma sono frutto di miei ragionamenti.
nel codice che ho postato io, creo una datagramsocket che ha l'unico scopo di stare in ascolto e ricevere i pacchetti, poi al thread passo non il pacchetto ma i dati che contiene e l'indirizzo di provenienza. questo perchè ho paura che sennò faccia casino, in quanto quando passi il pacchetto non passi una sua copia ma proprio l'area di memoria che lo contiene... quindi alla fine tutti i thread si troverebbero a la vorare sullo stesso buffer e questo non è a mio avviso consigliabile.
cmq, non ho fatto test approfonditi.
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
quindi devo usare la classe engine?
__________________
Originally posted by Vale
io per l'UDP ho fatto così che ne pensate?
__________________
?
e si effettivamente... :-)
All times are GMT. The time now is 07:05. | Pages (10): « First ... « 2 3 4 5 [6] 7 8 9 10 » Show all 145 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.