UDP服務端程式碼
阿新 • • 發佈:2018-11-28
//以下預設都是私有的成員 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(); }