您的位置:首页 > 移动开发 > Unity3D

unity 客户端 服务端 连接

2014-02-11 23:58 274 查看
//分别创建了两个线程客户端 服务器连接的简单示例



using UnityEngine;



using System;



using System.Collections;



using System.Threading;



using System.Net.Sockets;



using System.Net;



using System.Text;



public class TCPIPClientServer : MonoBehaviour



{



void Start()



{



Debug.Log(GetIP().ToString());



}



public static Socket ClientSocket;



private void InitConnect()



{



ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);



string ip = GetIP().ToString();//服务器ip



IPAddress ipa = IPAddress.Parse(ip);



IPEndPoint iep = new IPEndPoint(ipa, 8000);



try



{



ClientSocket.Connect(iep);//连接到服务器



Thread thread = new Thread(new ThreadStart(ClientReceive));



thread.Start();



}



catch (Exception ex)



{



Debug.Log(ex.Message);



clientReceiveValue = ex.Message;



}



}







/*接收来自服务器上的信息*/



public void ClientReceive()



{



clientReceiveValue = "已经建立连接准备接受数据";



while (true)



{



byte[] bytes = new byte[100];



int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。



if (rev <= 0)



{



break;



}



string strev = System.Text.Encoding.Default.GetString(bytes);



clientReceiveValue = ("服务器对客户端说:" + strev + "\r\n");



}



}











private void ClientSend()



{



if (ClientSocket.Connected)//判断Socket是否已连接



{







byte[] SendMessage = new byte[100];



SendMessage = Encoding.ASCII.GetBytes(clientSendValue);



ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。







}



else



{



Debug.Log("未建立连接!");



clientSendValue = "未建立连接!";



}



}







private string clientReceiveValue = "";



private string clientSendValue = "";



private string serverReceiveValue = "";



private string serverSendValue = "";



void OnGUI()



{



//服务器



GUI.TextField(new Rect(100, 100, 200, 50), serverReceiveValue);



if (GUI.Button(new Rect(310, 100, 100, 20), "开始监听"))



{



Listen();



}



serverSendValue = GUI.TextField(new Rect(100, 150, 200, 40), serverSendValue);



if (GUI.Button(new Rect(310, 150, 100, 20), "服务器发送"))



{



SeverSend();



}







///客户端



GUI.TextField(new Rect(100, 350, 200, 40), clientReceiveValue);



if (GUI.Button(new Rect(310, 350, 100, 20), "连接服务器"))



{



InitConnect();







}







clientSendValue = GUI.TextField(new Rect(100, 400, 200, 40), clientSendValue);



if (GUI.Button(new Rect(310, 400, 100, 20), "客户端发送"))



{



ClientSend();



}



}











Thread LisThread;



Socket LisSocket;



Socket newSocket;



EndPoint point;



string strmes = String.Empty;



int port = 8000;//定义侦听端口号



private void Listen()



{



LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法



LisThread.Start();//线程开始执行



serverReceiveValue = GetIP().ToString() + "正在监听 ";



}







private void BeginListern()



{



LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket



IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */



IPEndPoint iep = new IPEndPoint(ServerIp, port);







LisSocket.Bind(iep); /*将Socket绑定ip */



LisSocket.Listen(50); //Socket开始监听



newSocket = LisSocket.Accept();//获取连接请求的Socket



/*接收客户端Socket所发的信息 */



while (true)



{



try



{







byte[] byteMessage = new byte[100];



newSocket.Receive(byteMessage);//接收信息



point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息



IPEndPoint IPpoint = (IPEndPoint)point;



strmes += IPpoint.Address.ToString() + "说" + Encoding.Default.GetString(byteMessage).Trim(new char[] { '\0' }) + "\r\n";



serverReceiveValue = strmes;



}







catch (SocketException ex)



{



Debug.Log(ex.ToString());



serverReceiveValue = ex.ToString();



}



}



}







private IPAddress GetIP()



{ /*获取本地服务器的ip地址 */



IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());



IPAddress ip = iep.AddressList[0];



return ip;



}







private void SeverSend()



{



byte[] byteData = Encoding.Default.GetBytes(serverSendValue);



newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息



}







}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: