Στησιμο Client-Server

...IDE, compilers, κλπ

Συντονιστής: konnn

Στησιμο Client-Server

Δημοσίευσηαπό limas » 07 Μαρ 2010, 18:38

Καλησπερα,

εχω μια εργασια στη σχολη υπολογιστων που φοιτω και ηθελα την γνωμη σας.

Μας εχει ανατεθει να στησιμου ενα Client και ενα Server, πο θα προσωμοιωνει τις γνωστες μηχανες αναζητησεις εισητηριων γαι διαφορους προορισμους.

Απλα εχω μια απορια. Τι ειναι πιο ευκολο??Η υλοποιηση σε C ή σε Java???Στην Java οι γνωσεις μου ειναι ελαχιστες, ωστοσο πολλοι μου συστηνουν αυτη τη γλωσσα γτ θα ειναι πολυ πιο μικρος ο κωδικας,
Γνώσεις ⇛ Linux:Χαμηλό ┃ Προγραμματισμός:Ναι ┃ Αγγλικά:Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 10.04.1 LTS σε Intel(R) Core(TM) 2 Duo CPU @ 2.00GHz
Προδιαγραφές ⇛ T5750│ RAM:3GB │Mesa DRI Intel(R) 965GM GEM │ Atheros AR5001 │Intel 82801H │ TFT 15.6''
limas
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 359
Εγγραφή: 06 Σεπ 2009, 15:47
Εκτύπωση

Re: Στησιμο Client-Server

Δημοσίευσηαπό Luke » 18 Μαρ 2010, 17:20

Ισχύει αυτό που σου είπαν οι πολλοί, αλλά αν γνωρίζεις πολύ καλύτερη C μπορεί να αξίζει. Σίγουρα πάντως με C θα δεις τα πράγματα σε πιο low-level επίπεδο.
Εγώ θα προτιμούσα Java αν έδινα βάρος στην ευκολία. Αλλά όπως καταλαβαίνεις αυτό είναι τελείως υποκειμενικό. :)
1 Γνώσεις ⇛ Linux: Χαμηλό προς Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
2 Λειτουργικά → Ubuntu 10.04 lucid 64bit (en_US.utf8), Windows 7
3 Προδιαγραφές → Intel Core i5-2500 CPU @ 3.30GHz ‖ RAM 7916 MiB ‖ MSI H67MA-E35 (MS-7680) - MSI MS-7680
4 Κάρτες γραφικών: Intel Sandy Bridge Integrated Graphics Controller [8086:0102] (rev 09)
5 Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06)
Άβαταρ μέλους
Luke
babeTUX
babeTUX
 
Δημοσιεύσεις: 91
Εγγραφή: 23 Μάιος 2009, 21:31
Εκτύπωση

Re: Στησιμο Client-Server

Δημοσίευσηαπό the_eye » 18 Μαρ 2010, 19:07

Δες και την λύση σε php mysql.
Όσο λιγότερο κλειστό λογισμικό έχεις, τόσα λιγότερα προβλήματα.
1 Γνώσεις ⇛ Linux: Καλό ┃ Προγραμματισμός: Ναι PHP, MySQL ┃ Αγγλικά: Καλά
2 Ubuntu 24.04.2
3 Intel Core i3-6100 CPU @ 3.70GHz ‖ RAM 7836 MiB ‖ Gigabyte B150M-HD3 DDR3-CF - Gigabyte B150M-HD3 DDR3
4 Intel HD Graphics 530 [8086:1912] {i915}
5 enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Άβαταρ μέλους
the_eye
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 11717
Εγγραφή: 16 Μαρ 2010, 17:19
Launchpad: ntoulasd
IRC: the_eye_
Εκτύπωση

Re: Στησιμο Client-Server

Δημοσίευσηαπό kalakouentin » 19 Μαρ 2010, 18:13

Δεν μου αρέσει η Java.
Μου αρέσει η C/C++.

Για client server το να γράψεις τα interface και να αρχίσεις να κάνεις υλοποιήσεις για Corba, TCP/UDP layers σε C/C++ ενώ υπάρχει η Java και η PHP όμως, είναι σαν να πυροβολείς τον ευατό σου στο πόδι. (Δεδομένου ότι κάνει μάλιστα και μια εργασία για μάθημα σχολής και όχι κάτι τρελά εξειδικευμένο)

Χρησιμοποίησε Java... (αν και μάλλον αν έχεις αρχίσει την εργασία σου θα έχει ήδη κατασταλάξει στην Java, το documentation της είναι απλά πολύ καλύτερο για τέτοια θέματα άλλωστε.)
Εικόνα
Γνώσεις ⇛ Linux: Συμπαθητικές ┃ Προγραμματισμός: Συμπαθητικότερες ┃ Αγγλικά: Αστέρι
Λειτουργικό ⇛ Ubuntu 10.04 32bit σε HP nw9440 ┃ Ubuntu 10.04 32bit σε Toshiba Satellite U400┃ SLED 11 64bit σε Dell OptiPlex 780
kalakouentin
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 545
Εγγραφή: 05 Ιούλ 2008, 05:50
Εκτύπωση

Re: Στησιμο Client-Server

Δημοσίευσηαπό ArgiBurgi » 25 Απρ 2010, 03:49

Java φιλε μου, ειχα και γω μία πανομοιότυπη εργασία όπου έπρεπε να υλοποιήσουμε έναν lucky number server και client
Αυτά πιστεύω να σε βοηθήσουν:
Client
Κώδικας: Επιλογή όλων
import java.io.*;
import java.net.*;
public class NumbersClient
{
public static void numbersclient(DataInputStream sin,
DataOutputStream sout) throws IOException
{
DataInputStream in = new DataInputStream(System.in);
PrintStream out = new PrintStream(sout);
String line;
while(true) {
line = "";
try {
line = in.readLine();
out.println(line);
} catch(IOException e) {
System.out.println(e.getMessage());
}
try {
//Όσο δεν έρθει το σήμα exit από τον server συνεχίζεται η λειτουργία του client.

line = sin.readLine();
if (!line.equals("exit")){
System.out.println(line);
}
//Αν ερθει σήμα exit από τον server γίνεται break της while-loop και συνέχιση του κώδικα
//από τo finally όπου κλεινει το socket και σταματά η λειτουργία του client.
else{
break;
}
}
catch(IOException e) {
System.out.println(e.getMessage());
}

}
}
public static void main(String[] args)
{
boolean exit;
Socket s = null;
try {

s = new Socket(args[0], 8205);

DataInputStream sin =
new DataInputStream(s.getInputStream());
DataOutputStream sout =
new DataOutputStream(s.getOutputStream());

System.out.println("Connected to " +
s.getInetAddress() + ":" + s.getPort());
System.out.println("----------------------------------------------------------");
System.out.println("Welcome to NUMBERS! Guess the number between 1 and 100");
System.out.println("To Quit type: quit");
System.out.println("----------------------------------------------------------");

numbersclient(sin, sout);

}
//Αν κατά την κλήση δεν εισαχθεί η IP του Server εγείρεται ArrayIndexOutOfBoundsException στην γραμμη 49.
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Πρέπει να εισάγεται και την διεύθυνση του Server");
}
catch(IOException e) {
System.out.println(e);
}

finally {
try {

if (s != null)
s.close();
} catch(IOException e) {
System.out.println("Closing socket...");
}
}
}
}



Server
Κώδικας: Επιλογή όλων
import java.net.*;
import java.io.*;
import java.lang.*;
import java.util.*;
public class NumbersServer {
public static void main(String args[])
{
try {
ServerSocket serversoc = new ServerSocket(8205);
while (true) {
Socket incoming = serversoc.accept();
NumbersThread et = new NumbersThread(incoming);
et.start();
}
} catch (IOException e) {
System.out.println("Error : " + e.getMessage());
}
}
}
class NumbersThread extends Thread
{
Socket s;
NumbersThread(Socket s)
{
this.s = s;
}

public void run()
{
boolean finished = false;
try {
Random num_generator = new Random();
//Κατασκευή του αντικειμένου num_generator της κλάσης Random
DataInputStream in =
new DataInputStream(s.getInputStream());
PrintStream out =
new PrintStream(s.getOutputStream());
System.out.println("Client from : " +
s.getInetAddress() + " port " + s.getPort());
while(!finished) {
try{
//Δημιούργία του τυχαίου αριθμού, το +1 χρειάζεται γιατί η nextInt συνάρτηση
//θέτει ώς όριο δημιουργίας από το 0 μέχρι την τιμή x που θα ορίσουμε.
int rand_num = num_generator.nextInt(100) + 1;
//Uncomment την παραπάνω γραμμή για να εμφανίζεται στον server ο τυχαίος αριθμός που αντιστοιχεί σε κάθε client.
//System.out.println(s.getInetAddress() + ":" + s.getPort() + ", Random Int = "+rand_num);
String st = in.readLine();
//Η συνθήκη st.equals(null) χρειάζεται για να αποφευχθεί infinite loop στην περίτωση ctrl+c
if (st.equals(null)){
continue;
}
//Όσο δεν εισαχθεί quit συνεχίζει η λειτουργία.
else if(!st.equals("quit")){
//Γίνεται parsing του st string για την εξαγωγή αριθητικών μονάδων
//αν εισαχθεί χαρακτήρας εγείρεται NumberFormatException και σε περίτωση
//null λόγω ctrl+c εισαγωγής εγείρεται NullPointerException.
int num = Integer.parseInt(st);
//Έλεγχος του αριθμού που εισήγαγε ο χρήστης, αρχικά αν είναι στο διάστημα 1-100
//και έπειτα άν είναι μεγαλύτερος, μικρότερος ή ίσος με τον τυχαίο αριθμό του server
if (num < 1){
System.out.println (s.getInetAddress() + ":" + s.getPort() + ", Inserted num < 1.");
out.println("Please Insert an Integer between 1 and 100");
}
else if(num > 100){
System.out.println (s.getInetAddress() + ":" + s.getPort() + ", Inserted num > 100.");
out.println("Please Insert an Integer between 1 and 100");
}
else if (num < rand_num){
out.println("Too Small. Guess it now:");
}
else if (num > rand_num){
out.println("Too Big. Guess it now:");
}
else if (num == rand_num){
System.out.println (s.getInetAddress() + ":" + s.getPort() + ", WINNER!!!.");
out.println("Congratulations! You WON!");
}
else {
out.println("An Error Occured, Please Try Again.");
}
}
else{
//Αν ο client εισάγει quit το finished γίνεται true και στέλνεται το σήμα exit
//για να σταματήσει ο client την λειτουργία του.
finished = true;
out.println("exit");
System.out.println(s.getInetAddress() + ":" + s.getPort() + ", Quits...Closing Thread.");
}
}
//Catch της NumberFormatException που έχουμε όταν εισαχθεί χαρακτήρας ή κενό.
catch (NumberFormatException e){
System.out.println (s.getInetAddress() + ":" + s.getPort() + ", Inserted a character or NULL.");
out.println("You did not insert anything or inserted a character,Guess it now:");
}
//Catch της NullPointerException για να σταματήσει η λειτουργία του while-loop στην
//περίπτωση ctrl+c και να προχωρήσει ο server στο κλείσιμο του thread.
catch (NullPointerException e){
System.out.println (s.getInetAddress() + ":" + s.getPort() + ", Disconected.");
break;
}
}
}
catch (IOException e) {
System.out.println(s.getInetAddress() + ":" + s.getPort() +", Error : " + e.getMessage());
}
finally {
try {
if (s != null)
s.close();
} catch(Exception e) {
System.out.println("Error : " + e.getMessage());
}
}
}
}
Γνώσεις ⇛ Linux: Καλή ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Desktop ⇛ Ubuntu 10.10 64bit |Gigabyte G41M-ES2L | Intel Core2 E400 | 4GB 800mhz Kingston Ram | Nvidia GT240, Level One (Ralink) USB WiFi Dongle
Laptop (Acer 7730G) ⇛ Ubuntu 10.10 64bit | Intel Core2 P7350 |4GB 800mhz Kingston Ram | Nvidia 9600M GT |40GB OCZ Agility2 SSD |Hitachi 250GB|WiFi Intel 5100 (iwlagn)
Άβαταρ μέλους
ArgiBurgi
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 13 Ιουν 2009, 11:06
Τοποθεσία: Σπήλαιο
Εκτύπωση

Re: Στησιμο Client-Server

Δημοσίευσηαπό oxide » 28 Απρ 2010, 00:41

ωραια λιγος κωδικας για να παιξουμε :lol: thx
Γνώσεις ⇛ Linux: χαμηλο ┃ Προγραμματισμός: ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 9.04
Προδιαγραφές ⇛ q6600 │ 4GB │ NVIDIA 8600gt │ HD Audio │1,160terabyte│ TFT 17"(X2 ορισμενες φορες)
oxide
babeTUX
babeTUX
 
Δημοσιεύσεις: 50
Εγγραφή: 10 Σεπ 2009, 00:22
Εκτύπωση


  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού

cron