החיים ה מקו וני ם Networking הרצאה מספר 14 היום בהרצאה החומר היום אינו למבחן, אבל חיוני לפרויקט הסיום תקשורת בין מחשבים TCP/UDP תקשורת פרוטוקול HTTP ושימושיו?Servlets מהם הסבר על פרויקט הסיום 2 תקשורת בין מחשבים תקשורת בין מחשבים 4 3 עד כה דיבר נו על תוכ נות עצמאיות הכתובות ב- Java אז מה דרוש ב ש ביל ש שתי יש ויות ידברו אחת עם השנייה? שם מז הה ער וץ תקש ו רת שם מז הה ישנן דוגמאות רבות לתוכנות הדורשות קשר עם גורם חיצוני התחברות למסד נתונים חיצוני (לאו דוקא באותו מחשב) התחברות לתוכנה אחרת על מנת לקבל שירות טעינת קוד ממיקום מרוחק (למשל מהאינטרנט) שרת באינטרנט המכין תוכן דינאמי בהתאם לבקשה כמה עותקים של אותה תוכנה משתפים פעולה ברשת האינטרנט כתובות ושירותים staredu 192556 פרוטוקול האינטרנט (IP) מגדיר כתובות לכל מחשב המחובר לרשת/לאינטרנט יש כתובת הכתובת מאפשרת לרשת למצוא את המחשב הכתובת הינה 32 bit unsigned integer 192525252 בנוסף, ניתן לתת שם סימבולי, כגון wwwgooglecom שרתים הנקראים (Domain Name Server) DNS מתרגמים שמות סימבוליים לכתובות אינטרנט האם זה מספיק? flowerorg 192554 רו צ ה לה תח בר ל שי ר ות ספ צ י פי א יז ה שי ר ות? 6 5
כתובות ושירותים ערוצי תקשורת כשנרצה שירות מסוים, (number מספרי שירותים הם בין 0 ל- 65535 ישנם שירותים רבים המוגדרים כבר flowerorg 192554 נוסיף לכתובת הרצויה גם מספר שירות ) Port 23 רוצה להתחבר לשירות ספציפי א יז ה שי ר ות? כעת אנו יודעים למצוא אחד את השני אבל מה עם שפה משותפת? @#$$#@ 123331 @@#$#!^^ 34 :o) ער וץ תקש ו רת גכעןגכעןנ דגכ דגכש שדג שדג staredu 192556 Http: 80 Ftp: 21 Email: 25 Telnet: 8 7 ערוצי תקשורת UDP תקשורת לא אמינה ישנם שני פרוטוקולים ראשיים לתקשורת המוגדרים ברשתות IP TCP המאפשר יצירת קשר יציב בין שתי מכונות והחלפת מידע בצורה סינכרונית UDP שליחת חבילות מידע קטנות ממחשב למחשב MULTICAST UDP שליחת הודעה לקבוצה גדולה של מחשבים פרוטוקול הבנוי על גבי פרוטוקול האינטרנט הבסיסי חבילה נשלחת, אין וודאות שתגיע ליעדה לא מקבלים אישור שחבילה ששלחת הגיעה לא מקבלים הודעה אם החבילה נאבדה או נזרקה החבילות לאו דווקא מגיעות בסדר מסוים החבילות עלולות להיזרק לפח אם הרשת עמוסה מק בל שו לח 10 9 מודל ה- Sockets TCP תקשורת אמינה פרוטוקול אמין הבנוי על גבי בסיס לא אמין מאפשר זרימה דו-כיוונית של מידע משתמש במספרי הודעות ושליחות מחדש כדי לוודא שחבילות אומנם מגיעות ומגיעות לפי הסדר יש הודעה אם הייתה תקלה בתקשורת הפשטה בתוכנה של תקשורת על גבי רשת בין שני מחשבים (שתי ישויות) הפשטה חזקה דיה להתמודד כמעט עם כל פרוטוקול תקשורת (אך משתמשים בה בעיקר עבור פרוטוקולי (IP יש מימוש של Sockets כמעט בכל מערכת הפעלה ושפת תכנות 12 11
מודל ה- Sockets אז מה זה?HTTP Hyper Text Transfer Protocol HTTP השרת מאזין על שירות( PORT ) מסוים, לכל לקוח שרוצה להתחבר כשמגיעה בקשה מלקוח נוצר ללקוח ולשרת Socket וביניהם נפתח ערוץ תקשורת על גבי ערוץ זה כעת אפשר לתקשר סינכרונית בקש ת ה תח בר ו ת שייך למשפ חה של פרוטו קולים שיו שבי ם שכ בה מעל ו- UDP TCP הפרוטוקול העיק רי ברשת האינט רנט תקשורת בין דפדפן האינטרנט לשרתים ברשת מספר שירות עיקרי: 80 ער וץ תקש ו רת 14 13 לק וח שרת אז מה זה?HTTP אז מה זה?HTTP מחכה לבקשות על Port 80 HTTP שרת בהינתן בקשה, השרת מחזיר תשובה בעצם קובץ מחכה לבקשות על Port 80 HTTP שרת בהינתן בקשה, השרת מחזיר תשובה בעצם קובץ URL (Uniform Resource Locator) מש תמ ש מק ל יד כת ו בת אי נ טר נט השרת של GOOGLE מטפל בבקשה מייצג משאב כלשהוא ברשת, דף אינטרנט, קובץ, שירות כלשהוא 16 15 מחז יר ד ף HTML המ ו צג בד פדפ ן פרוטוקול ה- HTTP URL 18 17 1 2 3 4 מורכב מהחלקים הבאים פרוטוקול File) (Http, Ftp, כתובת או שם מספר שירות (Port) אופציונלי מידע ייחודי לפרוטוקול פרוטוקול מורכב וגדול י חסית http://wwww3org/protocols/ הגדרה מלאה: שני שירותים עיקריים GET POST מטרת השירותים פשוטה, בהינתן,URL החזר קובץ (בד"כ דף אינטרנט) 1 2 4 http://wwwflickrcom/photos/tjt195/220510703/ http://wwwgooglecoil/search?hl=iw&q=cow&btn&meta=
אבל לא דיברנו על Java Client connects to server on port 80 GET /~pugh/indexhtml HTTP/10 blank line Server responses with HTTP headers HTTP/11 200 OK Date: Mon, 20 Feb 2006 03:47:44 GMT Server: Apache Last-Modified: Wed, 15 Feb 2006 01:17:09 GMT ETag: "9b2b1c-948-1222af40" Accept-Ranges: bytes Content-Length: 2376 Connection: close Content-Type: text/html; charset=iso-8859-1 Followed by blank line, then contents of response GET 19 אז מה ג'אווה נותן? טעינת מחלקות מרוחקות Loaded class (can now create instances) Local Java program Local JVM Request remote class to load (URL) Bytecode UrlClassLoader - טעינה של מחלקות מרוחקות javarmi - הפעלה של שירותים בעצמים מרוחקים (javanet) Sockets ספריית מימוש מערכת Sockets מלאה שכבה נוספת לעבודה קלה עם URL םי' ספריות שונות לעבודה כ-שרת Servlets JSP J2EE בכלליות 22 21 Sockets הפעלה מרוחקת Sockets מימוש מלא של יש ב- javanet שתי מחלקות מממשות מודל לקוח/שרת Socket מאפשר להתחבר לשרת/שירות מסוים מייצג חיבור, מאפשר לשלוח ולקבל מידע ServerSocket bind קובע IP ו- Port עליהם השרת יקשיב accept מאזין ומחכה ללקוח, כשיש חיבור מחזיר מופע של Socket Local Java program Local JVM Connect to instance of a class Receive remote reference Call methods on remote Remote Java program Remote JVM 24 23
(2) Sockets דוגמה ל- Sockets דוגמה ל- //Request the file from the server, using the HTTP protocol toserverprint("get " + filename + " HTTP/10\r\n\r\n"); toserverflush(); //Now read the server's response, assume it is a text file, and print it out for(string l = null; (l = fromserverreadline())!= null; ) Systemoutprintln(l); //Close everything down when we're done toserverclose(); fromserverclose(); sclose(); import javanet*; import javaio*; //Here's a simple client program that connects to a web server, //requests a document and reads the document from the server String hostname = "javaoreillycom"; // The server to connect to int port = 80; // Standard port for HTTP String filename = "/indexhtml"; // The file to read from the server Socket s = new Socket(hostname, port); // Connect to the server //Get I/O streams we can use to talk to the server InputStream sin = sgetinputstream(); BufferedReader fromserver = new BufferedReader(new InputStreamReader(sin)); OutputStream sout = sgetoutputstream(); PrintWriter toserver = new PrintWriter(new OutputStreamWriter(sout)); 26 25 Server-side programming URL 28 27 מחלקת עזר המאפשרת לקבל מ שאבים ע"י ש ימוש ב- URL import javanet*; מהו קוד-שרת? רכיב תוכנה שרץ על שרת לשרת לקוחות רבים (מחשב מרכזי) ותפקידו המקרה הנפוץ ביותר אתרי אינטרנט לג'אווה הרחבות שונות התומכות בכתיבת קוד לצד השרת רוב ההרחבות מוגדרות ב- J2EE : Java 2 Enterprise edition אנחנו נתמקד ב- Servlets import javaio*; //Create some URL objects URL url=null, url2=null, url3=null; try { url = new URL("http://wwworeillycom"); // An absolute URL url2 = new URL(url, "catalog/books/javanut4/"); // A relative URL url3 = new URL("http:", "wwworeillycom", "indexhtml"); {catch (MalformedURLException e) { /* Ignore this exception */ } //Read the content of a URL from an input stream InputStream in = urlopenstream(); Servlets Servlets 30 Client Client Servlet Container (Tomcat) Server Servlet Servlet 1 2 3 4 29 Servlet הוא מחלקה מופעים של מחלקה זו יודעים לטפל בבקשות המגיעות לשרת ולייצר תשובה בהקשר של Servlet,Http יודע לקבל בקשה לקובץ (בד"כ דף (HTML ולהחזיר את הקובץ המבוקש Servlet אינו תכנית Java מלאה! אין לו זכות קיום עצמאית אין לו שרות מחלקה!main לקוח (למשל דפדפן) מבקש דף אינטרנט דינאמי השרת מפענח את הבקשה ומחליט איזה Servlet יטפל בה הבקשה מועברת ל- Servlet המטפל בה ומחזיר תשובה לשרת השרת מעביר את התשובה חזרה ללקוח (הדף מוצג בדפדפן)
מחזור החיים של Servlet Servlets time The Servlet Container A Servlet Constructor (class-dependant) Servlets can be found in javaxservlet The main interface: Servlet ServletConfig init Client Client Handling clients requests ServletRequest ServletResponse service destroy interface Servlet { void init(servletconfig config); //initialize servlet void service(servletrequest req, //handle requests ServletResponse res); void destroy(); //destroy this instance } Server 32 31 כמה דוגמאות HttpServlet HTTP מנשק עזר, מתאים רק לבקשות javaxservlethttp מוגדר ב- interface HttpServlet { void service(httpservletrequest req, //processes requests & HttpServletResponse rep); //transfers to approp Method void doget(httpservletrequest req, //handle GET requests HttpServletResponse res); void dopost(httpservletrequest req, //handle POST requests HttpServletResponse res); } 34 33 עוד דוגמא פרויקט סיום http://wwwcstauacil/courses/software1/exercises/final_projecthtm 35
38 הגדרת הפרויקט מטרת הפרויקט הינה ליצור דפדפן תמונות אשר מאפשר למשתמש לבחור ספרייה על המחשב ומציג את התמונות שבה בנוסף ניתנת למשתמש האפשרות "לשתף את התמונות", ז"א להעלות סט תמונות לאתר בצורה אוטומטית (מתוך דפדפן התמונות) ולאחר מכן לראות את גלריית התמונות בדפדפן האינטרנט Firefox) (Explorer, פרטים טכניים מועד ההגשה 240906 הפרויקט יהווה 10% מהציון בקורס הפרויקט ייעשה בזוגות (בלבד) מה צריך להגיש? מסמך בן שני עמודים לפחות המתאר כיצד ניגשתם לפתרון הבעיה, תכנון החוזים וכו' קובץ ZIP ובו הקוד של הפרויקט בצורה מסודרת (עם הוראות קומפילציה אם צריך) JAR עובד ובו התכנית המקומית, וקישור לשרת בו ניתן לראות גלריות בדפדפן האינטרנט 37 חלק ראשון דפדפן תמונות חלק ראשון דרישות טכניות 40 39 המשתמש בוחר ספרייה מקומית על המחשב במנשק הגראפי מוצגות כל התמונות בספרייה זו (צלמיות - (Thumbnails ניתן ללחוץ לחיצה כפולה על תמונה ולראות אותה בגדול יותר בלחיצת כפתור ניתן לתת שם לסט התמונות הנוכחי ולשלוח אותו לשרת באינטרנט (ראה חלק שני של הפרויקט) SWT מנשק גראפי קריאת והצגת תמונות I/O Java ו/או שימוש ב- SWT Java Networking שליחת התמונות לשרת חלק שני שרת תמונות חלק שני שרת תמונות עליכם לכתוב Servlet (לפחות אחד) המספק את השירותים הבאים מקבל בקשות להצגת תמונות, הבקשה יכולה להיות בקשה להצגת כל סטים המאוחסנים על השרת, מציג את שמות הסטים, מספר תמונות בכל סט בקשה להצגת סט ספציפי (מזוהה לפי שם), מציג צלמיות (Thumbnails) של כל התמונות לחיצה על תמונה תפתח את התמונה המלאה בדף חדש עליכם לכתוב Servlet (לפחות אחד) המספק את השירותים הבאים מקבל בקשות להעלאת תמונות, כל בקשה מורכבת משם סט ומתמונה בינארית בפורמט JPG PNG או,GIF כל תמונה מאוחסנת בספרייה מקומית (על השרת) עם שם מתאים AddPicture(pic data) Web server Servlet Container 42 41
חלק שני דרישות טכניות השרותים יסופקו ע"י Servlet שתכתבו (ניתן לכתוב שניים אם אתם מעדיפים) ה - Servlet 'ים ירוצו כאן בפקולטה על שרת Tomcat התמונות המועלות ע"י המשתמש יאוחסנו בספרייה מקומית כאשר יש בקשה להצגת תמונות, ה- Servlet יכין דף אינטרנט (HTML) מעוצב להצגה בדפדפן האינטרנט הרחבת הפרויקט אתם מוזמנים להרחיב את הגדרת הפרויקט ולהוסיף יכולות נוספות נחמדות ומעניינות רעיונות ניתן לשאוב מ Flickr wwwflickrcom Google Picassa - http://picasagooglecom/ Adobe Photoshop Album וכו' 44 43 בהצלח ה!!