Unity中使用Socket进行Tcp连接-同步(一)

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主线程卡死!!因为这些用于通信的方法是阻塞方法,因此在没有收到数据时,程序会卡住,下一章会介绍异步方式。

你可能感兴趣的:(游戏网络通信Unity)