{"id":221,"date":"2015-04-29T20:44:29","date_gmt":"2015-04-29T12:44:29","guid":{"rendered":"http:\/\/qxu1606620110.my3w.com\/?p=221"},"modified":"2016-10-11T09:33:54","modified_gmt":"2016-10-11T01:33:54","slug":"%e5%9c%a8unity%e4%b8%ad%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e5%bc%82%e6%ad%a5socket%e9%80%9a%e4%bf%a1%e6%8a%80%e6%9c%af","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=221","title":{"rendered":"\u5728Unity\u4e2d\u5982\u4f55\u5b9e\u73b0\u5f02\u6b65Socket\u901a\u4fe1\u6280\u672f"},"content":{"rendered":"<p style=\"text-align: center;\"><span style=\"color: #ff0000;\">\u8f6c\u81ea\uff1a<a href=\"http:\/\/www.cnblogs.com\/daxiaxiaohao\/p\/4402063.html\" target=\"_blank\">http:\/\/www.cnblogs.com\/daxiaxiaohao\/p\/4402063.html<\/a><\/span><\/p>\n<p>\u5728\u521a\u521a\u5f00\u53d1Unity\u9879\u76ee\u7684\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u7528\u5230\u5373\u65f6\u901a\u4fe1\u529f\u80fd\u6765\u5b8c\u6210\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u5c01\u88c5\u3002<br \/>\n\u73b0\u5728\u5c06\u90e8\u5206\u4e3b\u8981\u529f\u80fd\u7684\u5b9e\u73b0\u4ee3\u7801\u62bd\u53d6\u51fa\u6765\u5b9e\u73b0\u4e86\u53ef\u4ee5\u5f02\u6b65Socket\u8bf7\u6c42\u7684\u6280\u672fDemo\u3002<\/p>\n<p>\u5ba2\u6237\u7aef\u811a\u672cClientScript<\/p>\n<pre class=\"lang:c# decode:true \" title=\"\u5ba2\u6237\u7aef\u811a\u672cClientScript\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ Client Script.\r\n\/\/\/ Created By \u84dd\u9e253G 2014.08.23\r\n\/\/\/ &lt;\/summary&gt;\r\n\r\nusing UnityEngine;\r\nusing System.Collections;\r\n\r\npublic class ClientScript: MonoBehaviour {\r\n    string msg = \"\";\r\n    \/\/ Use this for initialization\r\n\r\n    LOSocket client;\r\n    void Start () {\r\n        client = LOSocket.GetSocket(LOSocket.LOSocketType.CLIENT);\r\n        client.InitClient (\"127.0.0.1\", 2222, ((string content) =&gt; {\r\n            \/\/\u6536\u5230\u670d\u52a1\u5668\u7684\u56de\u9988\u4fe1\u606f\r\n        }));\r\n    }\r\n\r\n    void OnGUI() {\r\n        msg = GUI.TextField(new Rect(0, 0, 500, 40), msg);\r\n        if(GUI.Button(new Rect(0, 50, 100, 30), \"Send\"))\r\n        {\r\n\r\n            client.SendMessage (msg);\r\n        }\r\n    }\r\n}<\/pre>\n<p>\u670d\u52a1\u5668\u7aef\u811a\u672c<\/p>\n<pre class=\"lang:c# decode:true \" title=\"\u670d\u52a1\u5668\u7aef\u811a\u672c\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ Server Script.\r\n\/\/\/ Created By \u84dd\u9e253G 2014.08.23\r\n\/\/\/ &lt;\/summary&gt;\r\n\/\/\/ \r\n\/\/\/ \r\nusing UnityEngine;\r\nusing System.Collections;\r\n\r\npublic class ServerScript : MonoBehaviour {\r\n\r\n    private string receive_str;\r\n    LOSocket server;\r\n    \/\/ Use this for initialization\r\n    void Start () \r\n    {\r\n        server = LOSocket.GetSocket(LOSocket.LOSocketType.SERVER);\r\n        \/\/\u521d\u59cb\u5316\u670d\u52a1\u5668\r\n        server.InitServer((string content) =&gt; {\r\n            receive_str = content;\r\n        });\r\n    }\r\n\r\n    void OnGUI()\r\n    {\r\n        if (receive_str != null) \r\n        {\r\n            GUILayout.Label (receive_str);\r\n        }\r\n    }\r\n}<\/pre>\n<p>LOSocket\u6846\u67b6<\/p>\n<pre class=\"lang:c# decode:true \" title=\"LOSocket\u6846\u67b6\">\/\/\/ &lt;summary&gt;\r\n\/\/\/ LOSocket.\r\n\/\/\/ Created By \u84dd\u9e253G 2014.08.23\r\n\/\/\/ &lt;\/summary&gt;\r\n\/\/\/ \r\n\/\/\/ \r\nusing UnityEngine;\r\nusing System.Collections;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\n\r\n\/\/\u6536\u5230\u6d88\u606f\u540e\u7684\u59d4\u6258\u56de\u8c03\r\npublic delegate void ReceiveCallBack(string content);\r\n\r\npublic class LOSocket{\r\n\r\n    \/\/\u53ef\u4ee5\u521b\u5efa\u7684Socket\u7aef\u53e3\u7c7b\u578b\r\n    public enum LOSocketType \r\n    {\r\n        CLIENT = 0,\r\n        SERVER = 1,\r\n    }\r\n    #region --------\u53d6\u6d88\u6784\u9020\u5668\r\n    private LOSocket()\r\n    {\r\n    }\r\n        \r\n    #endregion\r\n    \r\n    #region --------\u516c\u5171\u4ee3\u7801\r\n    \/\/\u901a\u8fc7\u9759\u6001\u65b9\u6cd5\u83b7\u53d6\u4e0d\u540c\u7684\u7aef\u53e3\u7c7b\u578b\r\n    public static LOSocket GetSocket(LOSocket.LOSocketType type)\r\n    {\r\n        LOSocket socket = null;\r\n\r\n\r\n        switch (type) {\r\n        case LOSocketType.CLIENT:\r\n            {\r\n                \/\/\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5ba2\u6237\u7aef\r\n                socket = new LOSocket ();\r\n                break;\r\n            }\r\n        case LOSocketType.SERVER:\r\n            {\r\n                \/\/\u83b7\u53d6\u670d\u52a1\u7aef\r\n                socket = GetServer ();\r\n                break;\r\n            }\r\n        }\r\n\r\n        return socket;\r\n    }\r\n\r\n    #endregion\r\n    #region --------\u5ba2\u6237\u7aef\u90e8\u5206\u4ee3\u7801\r\n    private Socket clientSocket;\r\n\r\n    \/\/\u58f0\u660e\u5ba2\u6237\u7aef\u6536\u5230\u670d\u52a1\u7aef\u8fd4\u56de\u6d88\u606f\u540e\u7684\u56de\u8c03\u59d4\u6258\u51fd\u6570\r\n    private ReceiveCallBack clientReceiveCallBack;\r\n    \/\/\u7528\u6765\u5b58\u50a8\u670d\u52a1\u7aef\u8fd4\u56de\u7684\u6d88\u606f\u6570\u636e\r\n    byte[] Buffer = new byte[1024];\r\n\r\n    \/\/\u521d\u59cb\u5316\u5ba2\u6237\u7aefSocket\u4fe1\u606f\r\n    public void InitClient(string ip,int port,ReceiveCallBack ccb)\r\n    {\r\n        this.clientReceiveCallBack = ccb;\r\n        this.clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n\r\n        IPAddress address = IPAddress.Parse (ip);\r\n        IPEndPoint ep = new IPEndPoint (address, port);\r\n\r\n        this.clientSocket.Connect(ep);\r\n        \/\/\u5f00\u59cb\u5f02\u6b65\u7b49\u5f85\u63a5\u6536\u670d\u52a1\u7aef\u6d88\u606f\r\n        this.clientSocket.BeginReceive (Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback(ReceiveFromServer), this.clientSocket);\r\n    }\r\n\r\n    \/\/\u6536\u5230\u670d\u52a1\u7aef\u8fd4\u56de\u6d88\u606f\u540e\u7684\u56de\u8c03\u51fd\u6570\r\n    void ReceiveFromServer(System.IAsyncResult ar)\r\n    {\r\n        \/\/\u83b7\u53d6\u5f53\u524d\u6b63\u5728\u5de5\u4f5c\u7684Socket\u5bf9\u8c61\r\n        Socket worker = ar.AsyncState as Socket;\r\n        int ByteRead=0;\r\n        try\r\n        {\r\n            \/\/\u63a5\u6536\u5b8c\u6bd5\u6d88\u606f\u540e\u7684\u5b57\u8282\u6570\r\n            ByteRead = worker.EndReceive(ar);\r\n        }\r\n        catch (System.Exception ex)\r\n        {\r\n            this.clientReceiveCallBack (ex.ToString ());\r\n        }\r\n        if (ByteRead &gt; 0)\r\n        {\r\n            string Content = Encoding.Default.GetString (Buffer);\r\n            \/\/\u901a\u8fc7\u56de\u8c03\u51fd\u6570\u5c06\u6d88\u606f\u8fd4\u56de\u7ed9\u8c03\u7528\u8005\r\n            this.clientReceiveCallBack (Content);\r\n        }\r\n        \/\/\u7ee7\u7eed\u5f02\u6b65\u7b49\u5f85\u63a5\u53d7\u670d\u52a1\u5668\u7684\u8fd4\u56de\u6d88\u606f\r\n        worker.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback(ReceiveFromServer), worker);\r\n    }\r\n\r\n    \/\/\u5ba2\u6237\u7aef\u4e3b\u52a8\u53d1\u9001\u6d88\u606f\r\n    public void SendMessage(string message)\r\n    {\r\n        if (message == null)\r\n            return;\r\n\r\n        message += \"\\r\\n\";\r\n        byte[] sendData = Encoding.UTF8.GetBytes (message);\r\n\r\n        \/\/\u5f02\u6b65\u53d1\u9001\u6d88\u606f\u8bf7\u6c42\r\n        clientSocket.BeginSend (sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback (SendToServer), clientSocket);\r\n    }\r\n    \/\/\u53d1\u9001\u6d88\u606f\u7ed3\u675f\u7684\u56de\u8c03\u51fd\u6570\r\n    void SendToServer(System.IAsyncResult ar)\r\n    {\r\n        Socket worker = ar.AsyncState as Socket;\r\n        worker.EndSend (ar);\r\n    }\r\n\r\n    #endregion\r\n\r\n\r\n    #region -------\u670d\u52a1\u5668\u90e8\u5206\u4ee3\u7801\r\n    \/\/\u670d\u52a1\u5668\u7aef\u6536\u5230\u6d88\u606f\u7684\u5b58\u50a8\u7a7a\u95f4\r\n    byte[] ReceiveBuffer = new byte[1024];\r\n    \/\/\u670d\u52a1\u5668\u6536\u5230\u6d88\u606f\u540e\u7684\u56de\u8c03\u59d4\u6258\r\n    private ReceiveCallBack callback;\r\n\r\n    \/\/\u5355\u4f8b\u6a21\u5f0f  \r\n    private static LOSocket serverSocket;  \r\n    private static LOSocket GetServer() {  \r\n        if (serverSocket == null) {  \r\n            serverSocket = new LOSocket();  \r\n        }  \r\n        return serverSocket;  \r\n    }  \r\n\r\n    \/\/\u521d\u59cb\u5316\u670d\u52a1\u5668\u4fe1\u606f\r\n    public void InitServer(ReceiveCallBack cb) {\r\n        this.callback = cb;\r\n        \/\/ 1.\r\n        Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n        \/\/ 2.\r\n        IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 2222);\r\n        \/\/ 3.\r\n        server_socket.Bind(endPoint);\r\n        \/\/ 4.\r\n        server_socket.Listen(10);\r\n        \/\/ 5.\u5f00\u59cb\u5f02\u6b65\u7b49\u5f85\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u94fe\u63a5\r\n        server_socket.BeginAccept (new System.AsyncCallback (Accept), server_socket);\r\n\r\n        this.callback (\"\u5f00\u542f\u670d\u52a1\u5668\" + endPoint.ToString());\r\n    }\r\n\r\n    \/\/\u63a5\u53d7\u5230\u5ba2\u6237\u7aef\u7684\u94fe\u63a5\u8bf7\u6c42\u540e\u7684\u56de\u8c03\u51fd\u6570\r\n    void Accept(System.IAsyncResult ar){\r\n        \/\/\u83b7\u53d6\u6b63\u5728\u5de5\u4f5c\u7684Socket\u5bf9\u8c61 \r\n        Socket socket = ar.AsyncState as Socket;  \r\n        \/\/\u5b58\u50a8\u5f02\u6b65\u64cd\u4f5c\u7684\u4fe1\u606f\uff0c\u4ee5\u53ca\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u6570\u636e  \r\n        Socket worker = socket.EndAccept(ar);  \r\n\r\n        SocketError error;\r\n\r\n        \/\/\u5f00\u59cb\u5f02\u6b65\u63a5\u6536\u5ba2\u6237\u7aef\u53d1\u9001\u6d88\u606f\u5185\u5bb9\r\n        worker.BeginReceive (ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback (Receive), worker);\r\n        \/\/\u7ee7\u7eed\u5f02\u6b65\u7b49\u5f85\u65b0\u7684\u5ba2\u6237\u7aef\u94fe\u63a5\u8bf7\u6c42\r\n        socket.BeginAccept(new System.AsyncCallback(Accept), socket);  \r\n\r\n    }\r\n    \/\/\u670d\u52a1\u7aef\u6536\u5230\u5ba2\u6237\u7aef\u7684\u6d88\u606f\u540e\u7684\u56de\u8c03\u51fd\u6570\r\n    void Receive(System.IAsyncResult ar)\r\n    {\r\n        \/\/\u83b7\u53d6\u6b63\u5728\u5de5\u4f5c\u7684Socket\u5bf9\u8c61\r\n        Socket worker = ar.AsyncState as Socket;\r\n        int ByteRead=0;\r\n        try\r\n        {\r\n            ByteRead = worker.EndReceive(ar);\r\n        }\r\n        catch (System.Exception ex)\r\n        {\r\n            this.callback (ex.ToString ());\r\n        }\r\n        if (ByteRead &gt; 0)\r\n        {\r\n            string Content = Encoding.Default.GetString (ReceiveBuffer);\r\n            this.callback (Content);\r\n        }\r\n        \/\/\u7ee7\u7eed\u5f02\u6b65\u7b49\u5f85\u5ba2\u6237\u7aef\u7684\u53d1\u9001\u6d88\u606f\u8bf7\u6c42\r\n        worker.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback(Receive), worker);\r\n    }\r\n    #endregion\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8f6c\u81ea\uff1ahttp:\/\/www.cnblogs.com\/daxiaxiaohao\/p &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=221\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[21],"tags":[133,134],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/221"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=221"}],"version-history":[{"count":4,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/221\/revisions"}],"predecessor-version":[{"id":749,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/221\/revisions\/749"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=221"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}