1. 程式人生 > >UDP服務端程式碼

UDP服務端程式碼

    //以下預設都是私有的成員  
    Socket socket; //目標socket  
    EndPoint clientEnd; //客戶端  
    IPEndPoint ipEnd; //偵聽埠  
    string recvStr; //接收的字串  
    string sendStr; //傳送的字串  
    byte[] recvData = new byte[1024]; //接收的資料,必須為位元組  
    byte[] sendData = new byte[1024]; //傳送的資料,必須為位元組  
    int recvLen; //接收的資料長度  
    Thread connectThread; //連線執行緒  


    //初始化    首先是連線
    void InitSocket()
    {
        //定義偵聽埠,偵聽任何IP  
        ipEnd = new IPEndPoint(IPAddress.Any, 8001);
        //定義套接字型別,在主執行緒中定義  
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        //服務端需要繫結ip  
        socket.Bind(ipEnd);
        //定義客戶端  
        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        clientEnd = (EndPoint)sender;
        print("waiting for UDP dgram//等待UDP傳輸資料");

        //開啟一個執行緒連線,必須的,否則主執行緒卡死  
        connectThread = new Thread(new ThreadStart(SocketReceive));
        connectThread.Start();
    }

    void SocketSend(string sendStr)   //  清空快取   然後傳送給客戶端
    {
        //清空傳送快取  
        sendData = new byte[1024];
        //資料型別轉換  
        sendData = Encoding.ASCII.GetBytes(sendStr);
        //傳送給指定客戶端  
        socket.SendTo(sendData, sendData.Length, SocketFlags.None, clientEnd);
    }

    //伺服器接收     其次是接收
    void SocketReceive()    
    {
        //進入接收迴圈  
        while (true)
        {
            //對data清零  
            recvData = new byte[1024];
            //獲取客戶端,獲取客戶端資料,用引用給客戶端賦值  
            recvLen = socket.ReceiveFrom(recvData, ref clientEnd);
            print("message from//文字來自: " + clientEnd.ToString()); //列印客戶端資訊  
            //輸出接收到的資料  
            recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
            print(recvStr);
            //將接收到的資料經過處理再發送出去  
            sendStr = "From Server來自伺服器的資料: " + recvStr;
            SocketSend(sendStr);
        }
    }

    //連線關閉    傳輸終止
    void SocketQuit()
    {
        //關閉執行緒  
        if (connectThread != null)
        {
            connectThread.Interrupt();
            connectThread.Abort();
        }
        //最後關閉socket  
        if (socket != null)
            socket.Close();
        print("disconnect");
    }

    // Use this for initialization  
    void Start()
    {
        InitSocket(); //在這裡初始化server  
    }



    void OnApplicationQuit()//該函式在應用程式退出時執行
    {
        SocketQuit();
    }