1. 程式人生 > >UNITY之使用Socket與java伺服器通訊

UNITY之使用Socket與java伺服器通訊

---------------------------客戶端----------------------------------------

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Net;  
  6. using System.Net.Sockets;  
  7. using System.Threading;  
  8. using UnityEngine;  
  9. /* 
  10.  *  
  11.  *Socket客戶端通訊類
     
  12.  *  
  13.  * lm 
  14.  */
  15. publicclass SocketHelper  
  16. {  
  17.     privatestatic SocketHelper socketHelper=new SocketHelper();  
  18.     private Socket socket;  
  19.     //餓漢模式
  20.     publicstatic SocketHelper GetInstance()  
  21.     {  
  22.         return socketHelper;  
  23.     }  
  24.     private SocketHelper() {  
  25.         //採用TCP方式連線
  26.         socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  27.         //伺服器IP地址
  28.         IPAddress address = IPAddress.Parse("127.0.0.1");  
  29.         //伺服器埠
  30.         IPEndPoint endpoint = new IPEndPoint(address,8000);  
  31.         //非同步連線,連線成功呼叫connectCallback方法
  32.         IAsyncResult result = socket.BeginConnect(endpoint, new
     AsyncCallback(ConnectCallback), socket);  
  33.         //這裡做一個超時的監測,當連線超過5秒還沒成功表示超時
  34.         bool success = result.AsyncWaitHandle.WaitOne(5000, true);  
  35.         if (!success)  
  36.         {  
  37.             //超時
  38.             Closed();  
  39.             Debug.Log("connect Time Out");  
  40.         }  
  41.         else
  42.         {  
  43.             //與socket建立連線成功,開啟執行緒接受服務端資料。
  44.             Thread thread = new Thread(new ThreadStart(ReceiveSorket));  
  45.             thread.IsBackground = true;  
  46.             thread.Start();  
  47.         }  
  48.     }  
  49.     privatevoid ConnectCallback(IAsyncResult asyncConnect)  
  50.     {  
  51.         Debug.Log("connect success");  
  52.     }  
  53.     privatevoid ReceiveSorket()  
  54.     {  
  55.         //在這個執行緒中接受伺服器返回的資料
  56.         while (true)  
  57.         {  
  58.             if (!socket.Connected)  
  59.             {  
  60.                 //與伺服器斷開連線跳出迴圈
  61.                 Debug.Log("Failed to clientSocket server.");  
  62.                 socket.Close();  
  63.                 break;  
  64.             }  
  65.             try
  66.             {  
  67.                 //接受資料儲存至bytes當中
  68.                 byte[] bytes = newbyte[4096];  
  69.                 //Receive方法中會一直等待服務端回發訊息
  70.                 //如果沒有回發會一直在這裡等著。
  71.                 int i = socket.Receive(bytes);  
  72.                 if (i <= 0)  
  73.                 {  
  74.                     socket.Close();  
  75.                     break;  
  76.                 }  
  77.                 Debug.Log(System.Text.Encoding.Default.GetString(bytes));  
  78.             }  
  79.             catch (Exception e)  
  80.             {  
  81.                 Debug.Log("Failed to clientSocket error." + e);  
  82.                 socket.Close();  
  83.                 break;  
  84.             }  
  85.         }  
  86.     }  
  87.     //關閉Socket
  88.     publicvoid Closed()  
  89.     {  
  90.         if (socket != null && socket.Connected)  
  91.         {  
  92.             socket.Shutdown(SocketShutdown.Both);  
  93.             socket.Close();  
  94.         }  
  95.         socket = null;  
  96.     }  
  97.     //向服務端傳送一條字串
  98.     //一般不會發送字串 應該是傳送資料包
  99.     publicvoid SendMessage(string str)  
  100.     {  
  101.         byte[] msg = Encoding.UTF8.GetBytes(str);  
  102.         if (!socket.Connected)  
  103.         {  
  104.             socket.Close();  
  105.             return;  
  106.         }  
  107.         try
  108.         {  
  109.             IAsyncResult asyncSend = socket.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);  
  110.             bool success = asyncSend.AsyncWaitHandle.WaitOne(5000, true);  
  111.             if (!success)  
  112.             {  
  113.                 socket.Close();  
  114.                 Debug.Log("Failed to SendMessage server.");  
  115.             }  
  116.         }  
  117.         catch
  118.         {  
  119.             Debug.Log("send message error");  
  120.         }  
  121. 相關推薦

    UNITY使用Socketjava伺服器通訊

    ---------------------------客戶端---------------------------------------- using System;   using System.Collections.Generic;  

    Unity3d使用Socketjava伺服器通訊

    ---------------------------客戶端---------------------------------------- using System; using System.Collections.Generic; using System.Linq

    Android socket 電腦伺服器通訊 模擬機上可以訪問 手機上不能訪問

    本人因需要做一個手機與電腦通訊的app,先做了一個小例子測試一下,在模擬機上可以訪問電腦伺服器,手機上就連不上,上網查了很多辦法: 1.增加app中上網許可權 2.關閉電腦防火牆 3.使用無線路由,電腦和手機都連線無線路由,處於同一網段 等等,這些都不行,還是連不上。

    使用C語言socket實現windows pcftp伺服器通訊---socket實現ftp客戶端

    code // Client.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <WinSock2.h&

    AndroidJava 伺服器使用Socket協議實現Json資料傳輸

          Json資料的操作非常簡單,總的來說就是幾個物件的賦值。新建Json物件時,可以先新建一個名為root的 Json物件作為最後要傳送出去的Json物件,然後再往root中新增Json鍵值對或者Json陣列等資料。       用Socket協議傳送Json資料時

    cocos2d-x客戶端Java伺服器通訊(一)

    (⊙o⊙)…貌似自己已經有一段時間沒有寫部落格了,其實主要原因還是覺得自己水平有限,加上上班實在是太忙,實在抽不出時間來寫部落格。言歸正傳,大家都知道,在網路遊戲開發中, 網路通訊一直是個比較大的難題,一個伺服器可能要同時處理幾千上萬甚至上百萬的使用者資料,當然,僅僅是通訊

    Android客戶端java伺服器端的Socket連線

    開發十年,就只剩下這套架構體系了! >>>   

    每天學一點ScalaScalaJava的區別?

    scala java 函數式編程 A、Scala是編譯型語言,可以隨意調用Java代碼;B、 Scala函數式編程語言,在scala世界裏,函數才是一等公民;函數可以作為參數進行傳遞,可以賦值給變量,可以作為返回值進行返回scala中,具有嵌套函數、匿名函數、高階函數、偏函數scala支持閉包本

    UnityUpdateFixedUpdate區別

    str 點擊 區別 com unity 3-0 auto ongui info 下面這段代碼演示遊戲暫停 using UnityEngine; using System.Collections; public class GamePauseTest : M

    談一談socketjava

    res socket 解決方案 sts 構造 ron sta bsp 直接 用java中socket實現socket聊天 1, 什麽是socket Socket 是指網絡套接字,什麽是套接字呢? 這是網絡上一種端對端的網絡協議,端口就是進程號,socket在

    Android 客戶端Socket Java服務端ServerSocket

    Socket程式設計   一、Java網路程式設計基礎知識        1、兩臺計算機間進行通訊需要以下三個條件:            1)、 IP地址(例

    React總結篇七_Redux和伺服器通訊

    React元件訪問伺服器的方式 Redux架構下訪問伺服器的方式 一、React元件訪問伺服器 代理功能訪問API React元件訪問伺服器的生命週期 以顯示天氣預報為示例: 通過伺服器API獲得天氣情況資料 展示天氣情況資料 分兩個步驟完成:(1)

    C #java進行通訊?傳輸字串為例。

    C#端程式碼: String contents =“hello 這是C#傳來的資料”;//請求string uri = "http://192.168.1.149:8080/專案名/TestServlte";HttpWebRequest request = HttpWebR

    Linux下Socket客戶端伺服器通訊

    Linux/Unix系統一切都是檔案 Linux系統中,存在一個虛擬檔案系統VFS,把一切實體視為檔案,包括普通檔案、音視訊、輸入輸出裝置等。這樣,作業系統可以可以提供統一的介面來操作任何實體。每個“檔案”建立後,都有一個檔案描述符(File Describer),檔案描述符是一個正

    Scala學習5scalajava的不同總結1

    1.scala不同宣告變數的具體型別,只需要宣告是var還是val,即變數或不變數,由編譯器自動判斷。而java需要具體宣告,比如Int,String 2.scala函式宣告返回值是宣告在後面,而且可以不用return,直接在最後寫返回變數或常量即可。比如     def

    微信小程式前端java後臺進行資料互動

    最近小程式挺火的,準備寫個小程式試試,我會將我遇到的問題和我認為有用的記錄下來,但是隻瞭解java,並不太懂PHP,雖然說語言都是相通的(我也不知道誰說的),反正還是用Java寫後臺吧,1.申請伺服器+域名3.準備使用ssm框架進行後臺開發,先進行前端後臺資料互動試試後臺ja

    iOS遠端真機iTunesiPhone的通訊協議usbmuxd解析

           最開始研究與iPhone通訊, 都會想當然的google下usb協議, 必經iphone是通過usb線連線到電腦. 其實不然, iTunes是通過TCP協議與iPhone通訊的 usbmuxd        iTunes使用一種叫”usbmux

    AndroidJava伺服器端資料互動和Java物件轉換成JSON物件

    Ticket封裝成一個類 package com.model; public class Ticket { private int ticket_id; private int price; private int user

    cisco路由器IPSECVPN總部一個分部通訊配置

    環境:總部一個網段、分部一個網段、兩端固定ip地址。如果分部是動態ip的情況下,就將總部的set peer 的對端ip地址設定為0.0.0.0即可滿足總部為固定,分部為動態ip的情況。 路由器設定之Site to Site VPN設定&詳細幀中繼配置 首先說明一下,幀中繼一般都租

    客戶端服務端互動sockethttp協議的比較

    webservice是基於http協議的soap協議的封裝和補充,為的是提供一個公共穩定的介面。 區別: (1 )資料傳輸方式 1.1  socket傳輸的定義和其特點 所謂socket通常也稱作"套接字",實現伺服器和客戶端之間的物理連線,並進行資料傳輸,主要有udp和tcp兩個協議。socket處於網路