נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: כמה שאלות על sockets בjava

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 12:18 | IP רשוּם
ציטוט דור

אשמח לדעת כיצד אני פתוח socket
מקבל נתונים ממנו
שולח נתונים ממנו
סוגר אותו
וכו...

תודה דור.
חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 12:20 | IP רשוּם
ציטוט דור

אני לא יכול לערוך אז אני צריך לדעת איך לנהל גם socket udp
חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 
yohai
מנהל פורומים
מנהל פורומים
סמל אישי

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 28 May 2008 בשעה 13:05 | IP רשוּם
ציטוט yohai

הנה לדוגמא לתוכנית Client ו-Server שעשיתי, עכשיו מה שחשוב זה שעל-מנת לדעת אם

הגיע  מידע חדש, הן מהשרת או מהלקוח אתה צריך להריץ תהליכון שישעה לך את זה.

קלאס Client:

import java.io.*;

import java.net.*;

public class Client {

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

InetAddress addr = InetAddress.getByName("home-8a6a13c913");

System.out.println("addr = " + addr);

Socket socket =

new Socket(addr, 2003);

// Guard everything in a try-finally to make

// sure that the socket is closed:

try {

System.out.println("socket = " + socket);

BufferedReader in =

new BufferedReader(

new InputStreamReader(

socket.getInputStream()));

// Output is automatically flushed by PrintWriter:

PrintWriter out =

new PrintWriter( new BufferedWriter(

new OutputStreamWriter(

socket.getOutputStream())),true);

for(int i = 0; i < 10; i ++) {

out.println("Stam " + i);

// String str = in.readLine();

// System.out.println(str);

}

out.println("END");

} finally {

System.out.println("closing...");

socket.close();

}

}

}

 

קלאס Server:

import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import java.net.*; 
 public class Server { 

 
  public static final int PORT = 2003;
    

  
   public static void main(String[] args)
       throws IOException {
     ServerSocket s = new ServerSocket(PORT);
     System.out.println("Started: " + s);
     try {
       // Blocks until a connection occurs:
       Socket socket = s.accept();
       try {
         System.out.println(
           "Connection accepted: "+ socket);
         BufferedReader in =
           new BufferedReader(new InputStreamReader(
               socket.getInputStream()));
         // Output is automatically flushed by PrintWriter:
         PrintWriter out = new PrintWriter(
             new BufferedWriter( new OutputStreamWriter(
                 socket.getOutputStream())),true);
         while (true) { 
           String str = in.readLine();
           if (str.equals("END")) break;
           //System.out.println("Echoing: " + str);
           System.out.println(str);
           //out.println(str);
         }
       // Always close the two sockets...
       } finally {
         System.out.println("closing...");
         socket.close();
       }
     } finally { s.close(); }
   }
 }

 

תעתיק לפנקס רשימות וזה יסתדר.

עכשיו איך זה עובד???

על-מנת להעביר נתונים בין מחשב למחשב עליך לפתוח סוקט.

בוא נחשוב שהמחשב הוא עיר, וסוקט הוא בניין בעיר, אחרי שפתחנו סוקט אלינו לציין דרך

איזה חדר בבניין יועבר המידע (שזה נקרא פורט) לכן בנוסף לבניין עלינו גם לבחור חדר,

וזה בעצם הפורט.

עכשיו חשוב שלא תפתח פורט שהוא בשימוש כבר של מערכות שונות כמו Telnet ,FTP וכו',

אז בבקשה לא לעשות טעות מטומטמת ואחרי זה לא להבין למה זה לא עובד...

עקרונית עדיף שתבחר פורט שהוא מעל 1024 ככה תהיה בטוח ששום תוכנה לא תופסת לך

את הפורט הזה.

איך המידע מועבר, זה ממש פשוט, באמצעות אובייקטי הכתיבה והקריאה, כאשר זה נעשה

באמצעות הסוקט!, עכשיו בשביל לבדוק אם הגיע מידע חדש, אתה צריך להפעיל תהליכון

כל כמה זמן, שכאשר הוא יקרא תו ששונה מ-NULL או תו מוסכם שאותו הגדרת כתו

תחילת הודעה, אז תדע שכרגע נשלח מידע חדש.

 

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 16:13 | IP רשוּם
ציטוט דור

שאלה בstring

כתבתי את הקוד הבא

קוד:

import java.io.*;
import java.net.*;
import java.util.*;
public class EchoClient
{
    static Scanner input = new Scanner(System.in);
    public static void main(String[] args) throws IOException
    {
      Socket echoSocket = null;
      PrintWriter out = null;
      BufferedReader in = null;
      try
      {
        echoSocket = new Socket("irc.co.il",6667);
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
      }
      catch (UnknownHostException e)
      {
        System.err.println("Don't know about host: taranis.");
        System.exit(1);
      }
      catch (IOException e)
      {
        System.err.println("Couldn't get I/O for " + "the connection to: taranis.");
        System.exit(1);
      }
       out.println("NICK Zomeded");
      out.println("USER Zomeded Zomeded2 Zomeded3 Zomeded4 Zomeded5 Zomeded6");
   BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
   while (in.readLine() != null)
   {
     System.out.println("echo: " + in.readLine());
   }
   out.close();
   in.close();
   stdIn.close();
   echoSocket.close();
    }
}


הוא מתחבר לשרת irc וקורא את המידע
עכשיו כאשר השרת שולח PING :X אני צריך לשלוח PONG :X
איך אני מקבל את המילה השניה ממשתנה string?

חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 
yohai
מנהל פורומים
מנהל פורומים
סמל אישי

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 28 May 2008 בשעה 18:03 | IP רשוּם
ציטוט yohai

יש לך פה טעות, והיא פשוטה, אתה בודק בהתחלה אם,

in.readline!=null עכשיו כשאתה עושה זאת אתה קורא תו ומעביר את הקריאה למחרוזת

הבאה.

ואז בתוך הלולאה אתה עושה שוב in.readline וההדפסה היא של מחרוזת אחרת,

לכן, נכון לעשות לפני הלולאה St1=in.readline ואז לבדוק את St1, אם הוא שונה

מ-NULL מדפיסים, ושוב בסוף הלולאה עושים St1=in.readline.

בקשר ל-UDP תסתכל על הקישור הבא:

http://www.zindell.com/israeliJavaBook/israeliJavaBookWebText14.html

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 19:05 | IP רשוּם
ציטוט דור

אוקיי תקנתי
תודה על העזרה

איך אני מקבל ממשתנה string את המילה השניה?
חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 
yohai
מנהל פורומים
מנהל פורומים
סמל אישי

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 28 May 2008 בשעה 19:29 | IP רשוּם
ציטוט yohai

איזה מילה שנייה, לא הבנתי,

הלולאה עובדת עד שנגמר קבלת הסטרינגים...

תגיד למה התכוונת, כי אני גם לא רואה פה משתנה מסוג סטרינג...

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 19:36 | IP רשוּם
ציטוט דור

קוד:

String x;
x = "asd lol zing";
if (? == "lol")
System.out.println("lol found in the second word");

אני בעצם רוצה לשאול בif האם המילה השניה בx היא lol
מה אני צריך לכתוב במקום הסימן שאלה בif ?

חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 
דור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 28 May 2008 בשעה 21:39 | IP רשוּם
ציטוט דור

אוקיי פתרתי את הבעיה על ידי כתיבת פעולה gettok
למי שזה מעניין אותו:
קוד:

  public static String gettok(String str,int p,int c)
  {
    int len = str.length();
    int b,b1,b2;
    String str2;
    b = 0;
    b1 = -1;
    b2 = len;
    for (int i = 0; i < len; i++)
    {
      if (str.charAt(i) == c)
      {
        b=b+1;
        if (p-1 == b)
          b1 = i;
        if (p == b)
          b2 = i;
      }
    }
    str2 = "" + str.charAt(b1+1);
    for (int i = b1+2; i < b2; i++)
    {
      str2 = str2 + str.charAt(i);
    }
    return str2;
  }
חזרה לתחילת העמוד הצג את כרטיס החבר של דור חפש הודעות אחרות של דור בקר בדף הבית של דור
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה