עבור לתוכן

[c#] סוקטים

Featured Replies

פורסם

תרשום מה שניסית לעשות.

  • תגובות 35
  • צפיות 5.9k
  • נוצר
  • תגובה אחרונה
פורסם
  • מחבר


public static void SendMSG(string msg)
{
try
{
NetworkStream NS = client.GetStream();
StreamWriter SW = new StreamWriter(NS);

SW.WriteLine(msg);
}
catch { MessageBox.Show("Failed to send message","Error",MessageBoxButtons.OK,MessageBoxIcon.Error); }
}

כל פעם שאני רוצה לשלוח הודעה אני רושם

SendMessage("bla...");

* זה רץ בת'ראד הראשי

עריכה:

לא משנה הצלחתי :)

הינה הקוד לכל מי שחפץ בו:


public static void SendMSG(string msg)
{
try
{
NetworkStream NS = client.GetStream();
byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
NS.Write(data, 0, data.Length);
}
catch { MessageBox.Show("Failed to send message","Error",MessageBoxButtons.OK,MessageBoxIcon.Error); }
}

תודה :)

אוקיי עכשיו יש לי שאלה אחרת חח

איך אני שולח לכל המשתמשים? כי לא ממש הבנתי? איפה אני רושם לאיזה משתמש לשלוח?

פורסם

1) כדאי לך מדוק להשתמש בSTREAMWRITER. אם תתחיל להלוח הרבה הודעות, אתה תשים לב שהן מתערבבות לך. אתה צריך כל פעם לשלוח את האורך של המחרוזת ואז את המחרוזת ולקרוא בהתאם. את זה הSTREAMWRITER עושה לבד, ולא תצטרך לדאוג לזה.

2) עשית client.GetStream();. אתה צריך לשמור מערך של משתמשים, לרוץ עליהם בלולאה ולעשות לכל אחד ככה.

3) אמרת שלא הצלחת לעשות את זה בתראדים נפרדים, ולא רשמת את הקוד שיוצר את התראדים. התכוונת למשהו אחר?

פורסם
  • מחבר

1) זה לא הצליח לי עם StreamWriter.. אני מעדיף להישאר עם stream.Write..

2) יש לי את המשתמשים ב Arraylist, איך אני עובר עליו עם לולאה?

3) יש לי רק ת'ראד אחד נוסף, שהוא הליסטן, השליחת הודעות הוא לא ב thread משלו.. אלא ב Main.

פורסם

תפתח ת'רד חדש...


foreach(tcpClient client in arrayList)
{
try
{
NetworkStream NS = client.GetStream();
byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
NS.Write(data, 0, data.Length);
}
catch { MessageBox.Show("Failed to send message","Error",MessageBoxButtons.OK,MessageBoxIcon.Error); }
}


אם הקוד שלך עבד לך אז זה ישלח לכל המשתמשים (שוב, רצוי שיהיה בת'רד נפרד)

פורסם



newClients = new ArrayList();
foreach(TcpClient client in clients)
{
try
{
NetworkStream NS = client.GetStream();
byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
NS.Write(data, 0, data.Length);
newClient.Add(client);
}
catch { }
}
clients = newClients;

תשים לב שאם נזרק אקספשן הלקוח לא יתווסף לרשימה החדשה, ובעצם יוסר מהרשימה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים