c#的udp通訊代碼

來源:互聯網
上載者:User

//Author:smilelance

//From:http://blog.csdn.net/smilelance

using UnityEngine;

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

public class UdpConnection {
private static UdpConnection instance;
private const System.Int32 serverPort = 8320;
private const string serverAddress = "10.1.13.157";
UdpClient udpClient;

    private UdpConnection()
{
    
    }

    public static UdpConnection GetInstance()
    {
      if(instance==null){
        instance=new UdpConnection();
        }
        return instance;
    }

public void startUdpConnection(){
udpClient = new UdpClient();
        udpClient.Connect(serverAddress, serverPort);

//IPEndPoint object will allow us to read datagrams sent from any source.
        IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

         // Sends a message to the host to which you have connected.
         byte[] sendBytes = Encoding.UTF8.GetBytes("Client start online?");
// AsyncSend(sendBytes);
         //udpClient.Send(sendBytes, sendBytes.Length);
 
AsyncReceive();
}

// 發送資料 
public void AsyncSend(byte[] data){
        if (data.Length > 0){
// Debug.Log("sending : " + Encoding.UTF8.GetString(data));
           //udpClient.Send(data, data.Length, ipep);
udpClient.BeginSend(data, data.Length, new AsyncCallback(SendDataCallback), null);
}
}

//接收資料
public void AsyncReceive(){
        udpClient.BeginReceive(new AsyncCallback(ReceiveDataCallback), null);
}

//發送資料callback
public static bool messageSent = false;

private void SendDataCallback(IAsyncResult ar)
{
  //UdpClient u = (UdpClient)ar.AsyncState;
//print(u.EndSend(ar));
//u.EndSend(ar);
// Debug.Log("sending successfule");
  messageSent = true;
}


    //接收資料callback
    private void ReceiveDataCallback(IAsyncResult ar)
    {
        IPEndPoint ipep = (IPEndPoint)ar.AsyncState;
        byte[] data = udpClient.EndReceive(ar, ref ipep);
        if (data.Length != 0){
//            OnReceiveData(new UdpSimpleEventArgs(ipep, data));
// string returnData = Encoding.UTF8.GetString(data);
// Debug.Log("recv data: " + returnData);
MessageReceiver.GetInstance().parseReseiveMsg(data);
}
        //繼續從遠程主機接收資料報
        AsyncReceive();
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.