פורסם 2012 בינואר 213 שנים אני בדיוק לומד (לבד) של סוקטים עלמנת להבין יותר ומצאתי ברשת ספר של סוקטים ב-C#הספר כולל דוגמאות קוד עם הסברים, באחד הדוגמאות הראשונות יש קוד מסויים שנופל לי במחשב על השורה הראשונהזה תחילת ה-MAIN שלי ובתוך ה-if הוא נופל: static void Main(string[] args) { if ((args.Length < 2) || (args.Length > 3)) { // Test for correct # of args throw new ArgumentException("Parameters: <Server> <Word> [<Port>]"); }אשמח להסבר מה זה בדיוק ה-args הזה ולמה זה נופל לי
פורסם 2012 בינואר 213 שנים רצוי שתלמד קצת תכנות בסיסי לפני שאתה רץ ללמוד סוקטים.לכל תוכנית יש את הנקודת כניסה (Entry point) הפונקציה הראשונה שרצה כשאתה מריץ אותה.המוסכמה כמעט בכל שפת תכנות היא להשתמש בפונקציה סטטית בשם Main (כתלות בשפה היא עשויה להחזיר פרמטר או לא)אחד הדברים שחובה על הפונקציה הזאת לעשות הוא לקבל פרמטר, מכיוון שבשורה תחתונה כשאתה לוחץ על אייקון להריץ יישום מאחורי הקלעים אתה מערכת ההפעלה מריצה אותו בדרך הישנה, דרך השם שלו.יש ישומים שמסרבים לרוץ בלי פרמטרים מסויימים, הדוגמא שנתת אפילו רושמת לך איזה פרמטרים היא רוצה לקבל, פרמטר ראשון שם השרת שני מילה ושלישי פורט.אם אתה עובד עם C# לך להגדרות של הפרוייקט אם אני לא טועה תחת Debugger או compiler אמור להיות לך מקום לספק פרמטרים.
פורסם 2012 בינואר 213 שנים מחבר אני יודע תיכנות בסיסי אבל את זה לא ממש לימדו אותנואיפה אני משנה את ה שהסברת לי ? לא ממש מצאתי מה בדיוק לשנותתודה רבה !
פורסם 2012 בינואר 213 שנים חפש בהגדרות של הפרוייקט משהו שנקרא Command Line Arguments. זו פשוט מחרוזת שמכילה את הארגומנטים שמועברים לתכנית (כל מילה נכנסת לתא במערך args).
פורסם 2012 בינואר 213 שנים מה שהתכנית מצפה לקבל. אין הסבר כלשהו על דוגמת הקוד הזו?ניסית לקרוא את הקוד ולהבין מה כתוב שם?(חוץ מזה, מי הדביל שזורק Exception מה-main? מאיפה הקוד הזה?)וכמו שאמרו - תדאג ללמוד דברים בסיסיים יותר לפני שאתה קופץ לסוקטים. דברים כמו Command Line Arguments הם בסיסיים.נ.ב. שנה את הכותרת בבקשה. אין קשר בינה לבין הנושא.
פורסם 2012 בינואר 213 שנים מחבר על השורה הראשונה הזו רק מוסבר: Application setup and parameter parsingזה כל הקוד:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Net.Sockets;namespace TcpEchoServer{ class TcpEchoClient { static void Main(string[] args) { if ((args.Length < 2) || (args.Length > 3)) { // Test for correct # of args //throw new ArgumentException("Parameters: <Server> <Word> [<Port>]"); } String server = args[0]; // Server name or IP address byte[] byteBuffer = Encoding.ASCII.GetBytes(args[1]); // Convert input String to bytes int servPort = (args.Length == 3) ? Int32.Parse(args[2]) : 7; // Use port argument if supplied, otherwise default to 7 TcpClient client = null; NetworkStream netStream = null; try { client = new TcpClient(server, servPort); // Create socket that is connected to server on specified port Console.WriteLine("Connected to server... sending echo string"); netStream = client.GetStream(); netStream.Write(byteBuffer, 0, byteBuffer.Length); // Send the encoded string to the server Console.WriteLine("Sent {0} bytes to server...", byteBuffer.Length); int totalBytesRcvd = 0; // Total bytes received so far int bytesRcvd = 0; // Bytes received in last read while (totalBytesRcvd < byteBuffer.Length) // Receive the same string back from the server { if ((bytesRcvd = netStream.Read(byteBuffer, totalBytesRcvd, byteBuffer.Length - totalBytesRcvd)) == 0) { Console.WriteLine("Connection closed prematurely."); break; } totalBytesRcvd += bytesRcvd; Console.WriteLine("Received {0} bytes from server: {1}", totalBytesRcvd, Encoding.ASCII.GetString(byteBuffer, 0, totalBytesRcvd)); } } catch (Exception e) { Console.WriteLine(e.Message); } finally { netStream.Close(); client.Close(); } Console.ReadLine(); } }}
פורסם 2012 בינואר 213 שנים שים לב מה כתוב בשגיאה שהוא זורק.ושוב:נ.ב. שנה את הכותרת בבקשה. אין קשר בינה לבין הנושא.
פורסם 2012 בינואר 213 שנים מחבר הוא נופל על Object reference not set to an instance of an object.בשורה client = new TcpClient(server, servPort);והוא רושם בחלון קונסול את ההודעה הבאה שאני לא מבין מה זה אומר:No connection could be made because the target machine actively refused it [2001:0:4137:9e76:81c:299e:e057:cf2d]:7יכול להיות שזה בגלל שסתם חירבשתי לו מילים בתוך התיבה איפה שאמרתם לי להכניס משהו ואני לא יודע למה התוכנה מצפה.
פורסם 2012 בינואר 213 שנים יכול להיות שזה בגלל שסתם חירבשתי לו מילים בתוך התיבה איפה שאמרתם לי להכניס משהו ואני לא יודע למה התוכנה מצפה.well, duh... ציפית שהוא ינחש מה אתה רוצה?ניסית לקרוא את הקוד ולהבין מה כתוב שם?מה כתוב בשורה שהפכת להערה? בדרך כלל כשיש שגיאה בתכנית לא מתעלמים ממנה, מנסים להבין מה היא אומרת ואיך גורמים לכך שהיא לא תקרה.אתה יודע בכלל איך מתבצעת תקשורת בין מחשבים? מה זה לקוח ומה זה שרת?
פורסם 2012 בינואר 313 שנים מחבר אני רואה שאני צריך איזשהו server על המחשב עלמנת שיענה לקליינט, השאלה היא האם יש איזה קוד מוכן כבר של server שרק יעשה ECHO
פורסם 2012 בינואר 313 שנים מחבר התחלתי אבל בגלל שיש דוגמאות של קוד אני רוצה לראות מה זה עושה עלמנת להבין יותר ולא סתם רק לקרוא אלא גם לתרגל
פורסם 2012 בינואר 313 שנים נכון, אבל אין טעם לקרוא דוגמאות קוד אם אין לך מושג מה הן אמורות לעשות בכלל. הפואנטה היא לא להעתיק את הקוד כמו תוכי, אלא לקרוא ולהבין קודם.אם היית טורח להמשיך לקרוא את הספר היית רואה שמיד אחרי הקוד של הלקוח מופיע הקוד של השרת.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.