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

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值