none
群播問題 RRS feed

  • 問題

  • 各位大大您们好,我想請問一下,目前我再設計類似遠端監控,其他電腦透過我的程式,可以將主機(同一表單資料)資料傳送給大家並顯示在他們自己的電腦,我是利用下面程式碼(伺服器端),透過把對方ip加入群播就可以送資料給他,可是我只會加一個,不知道怎麼把很多電腦加進去群播(好讓我主表單有任何訊息即可告知大家),並寫另一程式碼在用戶端,另外紅色部分是我指定寫入的ip,我想問各位大大是否有其他方法,可以讓我知道直接由程式加入,而不是我ㄧ筆一筆加入別人ip,因為我可能不會知道對方位址,謝謝各位幫忙

     Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
     IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9888);
     IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("指定ip"), 9999);
     IPEndPoint iprm = (IPEndPoint)server.RemoteEndPoint;
     server.Bind(iep);
     byte[] data = Encoding.ASCII.GetBytes("This is a test message");
     
     server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("指定ip"), IPAddress.Parse("127.0.0.1")));

     server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50);            
     server.SendTo(data, iep2);
     Console.ReadLine();

    2009年2月18日 上午 09:40

解答

  • 你的功能,我做過,但我用的是WCF
    我這裡講一些通用的做法.
    首先你要寫一支Service (P to P 就不用),我是寫Client Server方式.
    在Server 裡首
    1.先要建立契約(就是雙方都要知道的資料格式),這樣才有辦法傳正確的資料.
    2.建立有關於Client 的List(也就是將Client的資訊記到Service的List裡).
    3.註冊功能,當Client上線至Service註冊,Service將Client資料寫到List裡.
    4.登出,Client資訊至Service List 裡移除.
    5.通知,Client 觸發通知事件,Service 收到此通知內容,解開通知資料,然後跟Service Client List 資料比對,運算後,再回傳到所要被通知的Client.
    6.Client 監聽Service通知,並做相關的處理.
    • 已標示為解答 冰糖旋風 2009年2月19日 上午 07:17
    2009年2月19日 上午 12:24

所有回覆

  • 你的功能,我做過,但我用的是WCF
    我這裡講一些通用的做法.
    首先你要寫一支Service (P to P 就不用),我是寫Client Server方式.
    在Server 裡首
    1.先要建立契約(就是雙方都要知道的資料格式),這樣才有辦法傳正確的資料.
    2.建立有關於Client 的List(也就是將Client的資訊記到Service的List裡).
    3.註冊功能,當Client上線至Service註冊,Service將Client資料寫到List裡.
    4.登出,Client資訊至Service List 裡移除.
    5.通知,Client 觸發通知事件,Service 收到此通知內容,解開通知資料,然後跟Service Client List 資料比對,運算後,再回傳到所要被通知的Client.
    6.Client 監聽Service通知,並做相關的處理.
    • 已標示為解答 冰糖旋風 2009年2月19日 上午 07:17
    2009年2月19日 上午 12:24
  • 所以我ㄧ開始要先將對方ip傳回給server端,就是註冊,是這種意思嗎,如果不是這個意思,我還是不太懂耶那我要怎麼定義註冊的那些動作,請再多說ㄧ點,真ㄉ很謝謝你
    2009年2月19日 上午 01:40
  •  差不多了,就是讓Server知道Client 的存在.
    ip 算是,但不是很清楚.
    正確的說因該是一個地址,路徑.
    在寫Client Service 不要將IP設死.
    在設計這種樣式,路徑通常是Client 自己產生的,他會自己產生IP跟Port的路徑,也就是一台主機開多支相同的程式,他還是會有它唯一的路徑.
    而這種方式不用去考慮防火牆的問題,因為這是路游的方式.
    2009年2月19日 上午 02:18
  • 對不起,我再加問,那如果多個clientㄧ起註冊,那server端會剛好讀不到那個client端的嗎
    您說的他會自己產生路徑,可以再詳細一點嗎,謝謝您
    2009年2月19日 上午 02:32
  • 1.能不能讀到Client 就要看你的智慧.這要看你Service 的Client 怎麼建置跟維護了.
    2.怎麼產生路徑??我不知道! 我用WCF 有雙向契約的功能,這個個能就像一般OO程式的事件委派一樣,只是將事件傳到遠端主機.
       產生路徑,現在比較新的寫法,像ASP.NET...我想很少人會去考慮這件事,你想你上一個網,他就那麼自然將資料送到你的瀏覽器,不管你開幾個瀏覽器或一個瀏覽
       器開多個視窗,它總有辦法把對的資料放到對的地方.這些都是依些標準協定跟底層Library在做,所以你不用擔心這件事.
       所有通訊協定在傳送時,就跟一般人寫信一樣,有表頭,表身...資訊,表頭裡有包含收件者,寄件者,傳送地址,寄件地址...資訊了.
    2009年2月19日 上午 03:18
  •   謝謝大大細心的幫助我,謝謝
    2009年2月19日 上午 07:17