Tcp是一种面向连接的,可靠,基于字节流的通信协议,Udp是一种快速,不可靠,但传输速度快的协议,Tcp连接是游戏开发中常用的一种网络通信协议,本文是对网络通信学习的总结;
第一部分介绍客户端,服务器端使用同步连接代码
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
public class Client : MonoBehaviour {
private Socket client;
// Use this for initialization
void Start () {
Thread thread = new Thread(ConnectToServer);
thread.Start();
}
private void ConnectToServer()
{
client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//ip:"127.0.0.1"连接本地测试, 端口号:8888 服务器客户端端口号需相同
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),8888);
client.Connect(endPoint);
string msg = "hello server";
byte[] data = Encoding.UTF8.GetBytes(msg);
client.Send(data);
}
}
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
public class Server : MonoBehaviour {
private Socket server;
private byte[] data = new byte[1024];
void Start () {
Thread thread = new Thread(InitServer);
thread.Start();
}
private void InitServer()
{
server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),8888);
server.Bind(endPoint);
server.Listen(0);//监听客户端数量不限
Debug.Log("等待客户端连接。。。");
while (true)
{
Socket client=server.Accept();
int count = client.Receive(data);
if (count != 0)
{
string msg = Encoding.UTF8.GetString(data, 0, count);
Debug.Log("收到客户端消息:" + msg);
}
}
}
}
由于Connect、Send,Receive是阻塞方法,因此开启新的线程连接服务器,否则将会造成Unity主线程卡死!!因为这些用于通信的方法是阻塞方法,因此在没有收到数据时,程序会卡住,下一章会介绍异步方式。