我是
靠谱客的博主
外向鸭子,最近开发中收集的这篇文章主要介绍
unity开发: socket网络连接,觉得挺不错的,现在分享给大家,希望可以做个参考。
建立两个unity工程,编写脚本。
服务端
- 创建套接字
- 绑定套接字到ip和端口
- 侦听连接
- 接收连接
- 与客户端收发数据
- 返回等待另一连接
- 断开连接
把脚本挂到unity场景中某个物体上,比如camera,由于创建连接后有接收循环,所以要单独开一个线程,否则主线程会卡死。
客户端
- using UnityEngine;
- using System.Collections;
-
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
-
- public class TcpClient:MonoBehaviour
- {
- string editString="hello wolrd";
-
- Socket serverSocket;
- IPAddress ip;
- IPEndPoint ipEnd;
- string recvStr;
- string sendStr;
- byte[] recvData=new byte[1024];
- byte[] sendData=new byte[1024];
- int recvLen;
- Thread connectThread;
-
-
- void InitSocket()
- {
-
- ip=IPAddress.Parse("127.0.0.1");
- ipEnd=new IPEndPoint(ip,5566);
-
-
-
- connectThread=new Thread(new ThreadStart(SocketReceive));
- connectThread.Start();
- }
-
- void SocketConnet()
- {
- if(serverSocket!=null)
- serverSocket.Close();
-
- serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
- print("ready to connect");
-
- serverSocket.Connect(ipEnd);
-
-
- recvLen=serverSocket.Receive(recvData);
- recvStr=Encoding.ASCII.GetString(recvData,0,recvLen);
- print(recvStr);
- }
-
- void SocketSend(string sendStr)
- {
-
- sendData=new byte[1024];
-
- sendData=Encoding.ASCII.GetBytes(sendStr);
-
- serverSocket.Send(sendData,sendData.Length,SocketFlags.None);
- }
-
- void SocketReceive()
- {
- SocketConnet();
-
- while(true)
- {
- recvData=new byte[1024];
- recvLen=serverSocket.Receive(recvData);
- if(recvLen==0)
- {
- SocketConnet();
- continue;
- }
- recvStr=Encoding.ASCII.GetString(recvData,0,recvLen);
- print(recvStr);
- }
- }
-
- void SocketQuit()
- {
-
- if(connectThread!=null)
- {
- connectThread.Interrupt();
- connectThread.Abort();
- }
-
- if(serverSocket!=null)
- serverSocket.Close();
- print("diconnect");
- }
-
-
- void Start()
- {
- InitSocket();
- }
-
- void OnGUI()
- {
- editString=GUI.TextField(new Rect(10,10,100,20),editString);
- if(GUI.Button(new Rect(10,30,60,20),"send"))
- SocketSend(editString);
- }
-
-
- void Update()
- {
-
- }
-
-
- void OnApplicationQuit()
- {
- SocketQuit();
- }
- }
- 创建套接字
- 向服务器发出连接请求
- 和服务器通信
- 断开连接
同样把脚本挂到场景某个物体中,创建连接和接收循环都放在新开的线程里面,在界面上放一个文字编辑框和一个button用于给服务端发消息。
测试
程序实现的功能为,当一个新的客户端连接到服务端时,服务端控制台输出相关信息,并向客户端发送初始信息,客户端每次向服务端的信息由服务端接收后添加一段字符串再发送回来。
发表评论 取消回复