.dsy:it. 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)


Posted by UZI on 31-03-2005 12:05:

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


Posted by urcodiaz on 31-03-2005 12:19:

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!!

__________________
:boing:


Posted by UZI on 31-03-2005 12:23:

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


Posted by francesco2 on 31-03-2005 12:30:

Grazieee UZI

__________________
r


Posted by papousek on 31-03-2005 14:13:

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


Posted by foxinho on 31-03-2005 14:14:

la vedo grigia domani...:(:(:(


Posted by Vale on 31-03-2005 14:24:

scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?


Posted by francesco2 on 31-03-2005 14:32:

Originally posted by Vale
scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?



Magari sbaglio in alcuni esercizi non bisognava inserire del codice in C? Qualcuno si ricorda?

__________________
r


Posted by Vale on 31-03-2005 14:34:

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();
}
}

}


Posted by papousek on 31-03-2005 14:42:

grazie del codice....mi ci vorra un secolo per decriptarlo....:D

nota di redazione...nn c ho capito na randazza di mazza...

__________________
Break Out


Posted by francesco2 on 31-03-2005 14:43:

é lo stesso esercizio che ha fatto Flavia però in Udp?

Grazie!:)

__________________
r


Posted by UZI on 31-03-2005 14:47:

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


Posted by urcodiaz on 31-03-2005 14:50:

quindi devo usare la classe engine?

__________________
:boing:


Posted by yeah on 31-03-2005 14:51:

Originally posted by Vale

io per l'UDP ho fatto così che ne pensate?

Che potevi mettere qualche commento :asd:

__________________
?


Posted by Vale on 31-03-2005 14:54:

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.