פורסם 2007 בספטמבר 118 שנים מחבר ניראה לי הבנתי ויש לי גם דוגמא ה main הוא כמו עורק ראשי, התראדים הם כמו ורידים, נכון? בכ"מ, עוד לא הצלחתי לעשות את ה Listen עריכה: אוקי הצלחתי לעשות ת'ראד חדש אבל יש לי בעיה לגשת למשתנה server: public void ListenStart() { // Set status lbl_Statusvalue.Text = "Initializing..."; // Set the TcpListener Int32 port = 12500; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); // TcpListener server = new TcpListener(port); TcpListener server = null; server = new TcpListener(localAddr, port); // Start TcpListener and change status lbl_Statusvalue.Text = "Ready."; server.Start(); Thread getReqTh = new Thread(new ThreadStart(GetReq)); } public static void GetReq() { TcpClient client = server.AcceptTcpClient(); } אני פשוט עוד לא כ"כ הבנתי את הקטע של public static void וכל השאר.. ז"א, איך הדבר הזה נקרא בכלל? public void Bla(){} ומה static עושה? =\ סליחה על השאלות חח
פורסם 2007 בספטמבר 118 שנים הייתה לי טעות בקוד, נערךusing System;using System.Collections.Generic;using System.Text;using System.Threading;using System.Net;using System.Net.Sockets;namespace ConsoleApplication1{ class Program { static bool listen = true; // when you change this to false the thread will stop listening static TcpListener listener; static List<TcpClient> clients = new List<TcpClient>(); static void Main(string[] args) { IPAddress localIp = Dns.GetHostAddresses(Dns.GetHostName())[0];// this line gives you the localIP IPEndPoint localHost = new IPEndPoint(localIp, 12500);// sets local host end point listener = new TcpListener(localHost);//sets the listener listener.Start();// starts listening Listen(); while (listen) listen = true; Console.WriteLine("host closing"); } private static void Listen() { listener.BeginAcceptTcpClient(new AsyncCallback(doWhatever), listener); } private static void doWhatever(IAsyncResult iar)// async operation to connect the tcpClient { TcpListener listener = (TcpListener)iar.AsyncState;// gets the listener TcpClient client = listener.EndAcceptTcpClient(iar);// gets the tcpClient from the listener clients.Add(client);// adds client to client list Console.WriteLine("host: connection made"); Listen(); } }}
פורסם 2007 בספטמבר 118 שנים ניראה לי הבנתי ויש לי גם דוגמא ה main הוא כמו עורק ראשי, התראדים הם כמו ורידים, נכון? בכ"מ, עוד לא הצלחתי לעשות את ה Listen עריכה: אוקי הצלחתי לעשות ת'ראד חדש אבל יש לי בעיה לגשת למשתנה server: public void ListenStart() { // Set status lbl_Statusvalue.Text = "Initializing..."; // Set the TcpListener Int32 port = 12500; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); // TcpListener server = new TcpListener(port); TcpListener server = null; server = new TcpListener(localAddr, port); // Start TcpListener and change status lbl_Statusvalue.Text = "Ready."; server.Start(); Thread getReqTh = new Thread(new ThreadStart(GetReq)); } public static void GetReq() { TcpClient client = server.AcceptTcpClient(); } אני פשוט עוד לא כ"כ הבנתי את הקטע של public static void וכל השאר.. ז"א, איך הדבר הזה נקרא בכלל? public void Bla(){} ומה static עושה? =\ סליחה על השאלות חח 1) תגדיר את המשתנה SERVER במחלקה, ולא בתוך הפונקציה. כך כל הפונקציות יכירו את המשתנה, ולא רק אחת. 2) לא התחלת את התראד שיצרת. 3) צריך להפריד בין משתנה סטטי למתודה סטטית. משתנה סטטי, לעומת משתנה שהוא לא סטטי משוייך לכל המחלקה, ולא לאובייקט מסוג המחלקה. מתודה סטטית היא כמו כל מתודה רגילה, אך בשונה ממנה היא יכולה להשתמש רק במשתנים סטטים.
פורסם 2007 בספטמבר 118 שנים מחבר ניסיתי להריץ את הקוד ש Saard נתן לי, והתוכנה לוקחת 170K מהזכרון וזה ממשיך לעלות :-X עריכה: טוב הצלחתי לעשות Listen בשרת, והצלחתי לשלוח socket בקליינט. איך אני עכשיו גורם לקליינט גם כן להיות במצב listen? עריכה: לא משנה תודה לכם.. אני עוד מעט אראה את מה שבניתי
פורסם 2007 בספטמבר 118 שנים קליינטים לא צריכים להיות במצב LISTEN מכיוון שהם צריכים להתחבר לשרת. אתה צריך ליצור TcpClient בצד השרת, ולהתחבר לשרת דרכו.לSaarD - אתה יכול לרשום while(true).
פורסם 2007 בספטמבר 118 שנים אין סיבה לרשום while(true) מכיוון שאני רוצה לתת תנאי עצירה בעתיד ואז פשוט אוכל לשנות את הערך ל false והת'רד יסתיים בצורה נקיה
פורסם 2007 בספטמבר 118 שנים מחבר גם אני ניסיתי לעשות כמו שהוא עשה.. הבעיה שזה לא עובד לי :-\ עריכה: אני משתפר גילתי את הבעיה, עשיתי ככה: // Listen loop while (StopTH) { MessageBox.Show("Runnging."); } וזה באמת עבד, כששיניתי את המשתנה ל false זה הפסיק.. אבל שהחזרתי, זה לא חזר שוב. שברתי ת'ראש שעה וחצי! ועכשיו אני קולט שברגע שהלולאה מקבלת false מבחינת הקוד נגמר והיא לא בודקת שוב ל true אז עשיתי בפנים עוד לולאה, ככה: while (true) { // Listen loop while (StopTH) { MessageBox.Show("Runnging."); } }
פורסם 2007 בספטמבר 218 שנים 1) תגדיר את המשתנה SERVER במחלקה, ולא בתוך הפונקציה. כך כל הפונקציות יכירו את המשתנה, ולא רק אחת.2) לא התחלת את התראד שיצרת.3) צריך להפריד בין משתנה סטטי למתודה סטטית. משתנה סטטי, לעומת משתנה שהוא לא סטטי משוייך לכל המחלקה, ולא לאובייקט מסוג המחלקה. מתודה סטטית היא כמו כל מתודה רגילה, אך בשונה ממנה היא יכולה להשתמש רק במשתנים סטטים.אני חשבתי שמה שמיוחד במתודה סטטית זה זה שלא צריך קודם מופע של הCLASS שלה. ובגלל זה main תמיד סטטית.אתה יכול לבדוק אם זה נכון? לפי הרשימות שלי אני צודק, מצד שני לא תמיד הקשבתי הכי טוב בהרצאות.
פורסם 2007 בספטמבר 318 שנים נכון.. שכחתי לציין את זה. בגלל שלא קוראים למתודה סטטית דרך אובייקט מפעיל, אלא "דרך המחלקה" זה לא מאפשר לנו להשתמש בממברים אחרים של האובייקט המפעיל(כי לא קיים כזה).
פורסם 2007 בספטמבר 418 שנים מחבר אוקיי שאלה אחרונה איך אני שולח הודעה לכל המשתמשים דרך TcpListener? יש לי את המשתמשים כבר ב arraylist.
פורסם 2007 בספטמבר 418 שנים אי אפשר.אתה לא יכול לשלוח הודעות דרך tcpListener האובייקט המדובר הוא רק מאזין לפורט בשביל חיבור קליינטים.מה שכן.. אתה צריך שיהיה לך networkStream לכל קליינט ואז תוכל לשלוח להם דברים.networkStream netStream = new networkStream(socket);ועכשיו לדוגמא נרצה לשלוח סטרינג??streamWriter sm = new streamWriter(netStream);sm.writeLine("Hello bob");כרגע נשלחה הודעה לאדם שאליו הסוקט מחובר
פורסם 2007 בספטמבר 418 שנים מחבר אממ.. אין לי namespace שנקרא streamwriter.ניסיתי ככה: public void MSG(string msg) { TcpClient client = server.AcceptTcpClient(); NetworkStream stream = client.GetStream(); byte[] data = System.Text.Encoding.ASCII.GetBytes(msg); stream.Write(data, 0, data.Length); }וזה שולח, אבל אני לא יודע אם זה שולח לכולם.. זה אמור?אה וד"א זה לא בת'ראד משלו..
פורסם 2007 בספטמבר 418 שנים אין בעיה שתעשה ככה, streamWriter מופיע ב namespace System.IO, ד"א streamWriter מקל עליך אם אתה רוצה לשלוח טקסט קצר, מספר או אובייקט בגלל העובדה שיש לו פונקציות מוכנות לדברים האלהwriteString, writeInt וכו'אם אתה רוצה לשלוח לכולם אתה צריך לעשות לולאה על אוסף הקליינטים שלך.
פורסם 2007 בספטמבר 518 שנים שיחם לב שבמצב הזה אתה שולח הודעה לקליינטים רק כשהקליינט מתחבר.אתה צריך לשים את הליסן בתראד שונה מהתראד ששולח הודעו כדי שהם לא יהיו תלויים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.