Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά. Έχω μια άσκηση σε java. Μήπως θα μπορούσε κάποιος να με βοηθήσει? Ευχαριστώ

 

Client


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Client {
	private static InetAddress serverAddress;

	private int serverPort = 4242;

	private DatagramSocket socket;

	public Client() {
		try {
			socket = new DatagramSocket();

		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void sendData() {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		while (true) {
			try {
				String data = br.readLine();

				byte[] dataToSend = data.getBytes();

				DatagramPacket packet = new DatagramPacket(dataToSend, dataToSend.length, serverAddress, serverPort);

				socket.send(packet);
                                
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		if (args.length != 1) {
			System.out.println("Error: you forgot <server IP>");
			return;
		}

		String serverIP = args[0];

		try {
			serverAddress = InetAddress.getByName(serverIP);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Client client = new Client();
		client.sendData();
	}
}

Server

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Server {

 
    public static void main(String args[]) {
 	DatagramSocket socket = null;
    	DatagramPacket packet = null;
 
        byte[] msg = new byte[200];
        try {
            socket = new DatagramSocket(4242);
        } catch (SocketException ex) {
            ex.printStackTrace();
        }
        while (true) {
            try {
                
                packet = new DatagramPacket(msg, 200);
                socket.receive(packet);
                System.out.println(new String(msg));

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

post-62422-0-56106600-1396890728_thumb.jpg

Δημοσ.

Το πρόβλημα είναι ότι ακόμα δεν έχουμε διδαχτεί java και πήρα ένα μάθημα επιλογής που είναι μονο java. Έχω ψαχτεί λίγο στο google αλλα κάνω αρκετά error. Τι πρέπει να προσθέσω στον κώδικα? Ευχαριστώ

Δημοσ.

Δε πρόκειται να σου δώσω έτοιμο κώδικα. Άλλωστε δε θα έχει και νόημα γιατι δε θα καταλάβεις και δεν είναι σωστό να σου δίνουν έτοιμη τροφή. Θα σου πω όμως ότι πρέπει να κάνεις το λιγότερο 3 κλάσεις: 1 UpdServer, 1 UdpClient, 1 Main. Οι udpServer, client θα έχουν μόνο τη λογική (members: functions, variables) και ο κώδικας θα εκτελείται απο τη Main. Έτσι θα βγάλεις πιο καθαρό κώδικα. Σχετικά εύκολη είναι αν εξαιρέσεις το σημείο που θα πρέπει να κάνεις νεο Thread. Διάβασε πως να κάνεις uml διάγραμμα μετά είναι εύκολο να γράψεις το κώδικα

Δημοσ.
  Στις 7/4/2014 στις 6:54 ΜΜ, Dark-Shadow είπε

Το πρόβλημα είναι ότι ακόμα δεν έχουμε διδαχτεί java και πήρα ένα μάθημα επιλογής που είναι μονο java.

 

Άρα και η λύση του προβλήματος είναι προφανής: στο επόμενο εξάμηνο μη πάρεις το ίδιο επιλογής, ή αν το πάρεις φρόντισε πρώτα να μάθεις κάπως Java.

 

Προσωπικά η εντύπωση που μου δημιουργείται από την ερώτηση όπως την έχεις διατυπώσει είναι ότι δεν καταλαβαίνεις τίποτα απολύτως και περιμένεις με copy paste να βγάλεις κώδικα που δουλεύει. I could be wrong.

Δημοσ.
  Στις 8/4/2014 στις 10:39 ΠΜ, defacer είπε

Άρα και η λύση του προβλήματος είναι προφανής: στο επόμενο εξάμηνο μη πάρεις το ίδιο επιλογής, ή αν το πάρεις φρόντισε πρώτα να μάθεις κάπως Java.

 

Προσωπικά η εντύπωση που μου δημιουργείται από την ερώτηση όπως την έχεις διατυπώσει είναι ότι δεν καταλαβαίνεις τίποτα απολύτως και περιμένεις με copy paste να βγάλεις κώδικα που δουλεύει. I could be wrong.

 

You are right. Δυστυχώς αν δεν έχεις μια βάση δεν μπορείς να κάτσεις να γράψεις alone κώδικα. Από ότι έχω καταλάβει πρέπει να αποθηκεύσω σε array list τους clients και μετά να κάνω έλεγχο το string στον server (Signin, Signout)

Δημοσ. (επεξεργασμένο)

στο server δεν διαχειριζεσαι τους εγγεγραμμένους χρηστές . Χρειάζεσαι μια λίστα για αυτό . Με το που παραλάβεις το μήνυμα αν είναι για σύνδεση αποσυνδεση θα ενημερώσεις την λιστα. Αν παει να αποστειλει μηνυμα χωρις να ειναι στην λιστα θα τους επιστρεφεις λάθος.

 

Ο server πρέπει να ακουει αλλα και να στέλνει στους client όλα τα μηνύματα αλλα και τα notifications συνδέσεων αποσυνδεσεων. Για αυτό χρειάζεσαι μια καινούργια κλάση η οποία θα εκτελείται σε νέο thread και θα αναλαμβάνει να απαντησει σε όλους τους εγγεγραμένους χρηστές.

 

Ουσιαστικά δηλαδη στον server παραλαμαβανεις το μήνυμα ενημερώνεις την,λίστα αναλογα το μήνυμα και κανεις spawn νέο thread περνώντας τα αναλογα ορίσματα και αυτο θα στείλει σε όλους τους χρηστές της λίστας το μήνυμα η την ειδοποίηση.

 

Σου λείπει λοιπόν διαχειριση λίστας (επελεξε το collection που ειναι καλυτερο) και μια κλάση απαντήσεων όσον αφορά το server κομμάτι .

 

Στο client πάλι το ίδιο εκτός απο το να αποστελεις μέσα απο το main thread πρπεει και να δέχεσαι . Για αυτο χρειάζεσαι ένα ακομα thread που θα αναλαμβάνει να δεχεται μηνύματα . Ακομα πιο εύκολο δηλαδη .

Επεξ/σία από Aztec

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...