Unity网络Socket客户端搭建
前几天写的服务器,今天把客户端过了一遍,把代码分享给大家,写了注释,依旧是Socket,接着上次服务器写的客户端,欢迎各位童鞋留言交流学习
[code]csharpcode:
using UnityEngine; using System.Collections; //添加引用 using System.Net; using System.Net.Sockets; //这里咱们添加System.Text是为了 //把客户端要发送的String类型的数据转换为byte类型 //传送给服务器 using System.Text;
[code]csharpcode:下面是主要内容
public class CreateClient { //同服务器一样写成单例,以方便在需要创建客户端时调用 private static CreateClient _instance; private CreateClient() { } public static CreateClient GetInstance() { if (_instance==null) { _instance = new CreateClient(); } return _instance; } //创建客户端Socket对象 private Socket clientSocket; /// <summary> /// 客户端创建方法 /// </summary> /// <param name="ip">服务器IP</param> /// <param name="port">端口号</param> public void InitClient(string ip,int port) { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ip), port)); } //由于我们需要发送数据,所有跟服务器一样 //声明一个byte的数组用于数据发送 private byte[] clientbuffer = new byte[1024]; /// <summary> /// 客户端发送消息方法 /// </summary> /// <param name="msg">客户端要发送的数据,可以在外面调用这个方法发送数据</param> public void ClientSend(string msg) { //这里就用到了System.Text中的转换,一般采用UTF8的编码 clientbuffer = UTF8Encoding.UTF8.GetBytes(msg); //开始发送消息 //参数(发送的byte[]数据,偏移量,消息长度,SocketFlags服务,回调方法,当前状态) clientSocket.BeginSend(clientbuffer, 0, clientbuffer.Length, SocketFlags.None, clientAySend, clientSocket); } /// <summary> /// 回调方法 /// </summary> private void clientAySend(System.IAsyncResult ar) { clientSocket = ar.AsyncState as Socket; //在回调中结束发送,返回一个int //count:发送的数据的字节数 int count = clientSocket.EndSend(ar); }
[code]csharpcode: 然后就可以在任何地方创建客户端来连接指定服务器了,并可以发送string到服务器了
/// <summary> ///创建客户端 /// </summary> void Client() { //直接调用我们自己写的方法,传进ip和端口号,就可以连接服务器了 //(服务器ip,端口号)23546随便写的端口号,但要与服务器创建时一致 //127.0.0.1因为是我自己建的服务器,直接写了本地地址 CreateClient.GetInstance().InitClient("127.0.0.1", 23456); //假设下面是我们要发送的数据 string text = "Come from Client"; //调用我们自己写的发送消息方法,直接发送过去就行了 CreateClient.GetInstance().ClientSend(text); }