socket 广播消息


在 做Socket通信时,了解了客户端向服务器发送消息的

再来整理服务器向客户端发送广播消息

服务器端:

 1 using UnityEngine;
 2 using System.Collections;
 3 using System.Net;
 4 using System .Net.Sockets;
 5 using System .Threading;
 6 using System.Text;
 7 
 8 
 9 /*
10 author:miss li
11 use for;
12 */
13 namespace LMQ{
14 public class Server : MonoBehaviour 
15 {
16         Socket socket;
17         IPEndPoint ipEnd;
18         byte[] data;
19         string hostname;
20 
21         void Init()
22         {
23             socket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
24             ipEnd = new IPEndPoint (IPAddress.Broadcast, 8001);
25             hostname = Dns.GetHostName ();
26             data = Encoding.ASCII.GetBytes (hostname);
27             socket.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
28             Thread t = new Thread (BroadcastMessage);
29             t.Start ();
30         }
31 
32     void Awake()
33     {
34     
35     }
36         void Start () 
37     {
38             Init ();
39     }
40     
41         void BroadcastMessage()
42         {
43             while (true) {
44 //                data = new byte[1024];
45 //                data = Encoding.ASCII.GetBytes (hostname);
46                 socket.SendTo (data, ipEnd);
47                 Thread.Sleep (2000);
48             
49 
50 
51             }
52         }
53 
54         void BroadcastMessage(string hostname)
55         {
56             while (true) {
57                 data = new byte[1024];
58                 data = Encoding.ASCII.GetBytes (hostname);
59                 socket.SendTo (data, ipEnd);
60                 Thread.Sleep (2000);
61             }
62             
63         }
64         //void OnGUI()
65         //{
66         //    hostname = GUI.TextField(new Rect(100, 50, 60, 30), hostname);
67         //    if (GUI.Button(new Rect(100, 90, 60, 30), "send"))
68         //    {
69         //        BroadcastMessage(hostname);
70         //    }
71         //}
72 
73        
74 }
75 }

 

客户端:

using UnityEngine;
using System.Collections;
using System .Net;
using System.Net.Sockets;
using System .Threading;
using System.Text;

/*
author:miss li
use for;
*/
namespace LMQ{
public class Client : MonoBehaviour 
{
        Socket socket;
        IPEndPoint ipEnd;
        EndPoint End;
        byte[] data;
        int recv;
        string stringdata;

        void Init()
        {
            socket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            ipEnd = new IPEndPoint (IPAddress.Any, 8001);
            socket.Bind (ipEnd);
            End = (EndPoint)ipEnd;
            Thread t = new Thread (ReceiveData);
            t.Start ();

        }


        void ReceiveData()
        {
            data = new byte[1024];
            recv = socket.ReceiveFrom (data, ref End);
            stringdata = Encoding.ASCII.GetString (data, 0, recv);
            print ("received: " + stringdata + " form " + End.ToString ());
            socket.Close ();
        }
    
        void Start () 
    {
            Init ();
    }
    
        
}
}

当服务器端服务开启之后,客户端就会收到服务器端发送的广播消息,

同样的,服务端和客户端的端口号都需要保持一致

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM