效果展示
TCP
Transmission Control Protocol 传输控制协议
TCP是面向连接的流模式(俗称:网络流)。即传输数据之前源端和终端建立可靠的连接,保证数据传输的正确性。
流模式:由于建立连接,收到的数据都是同一主机发送的,所有可以发送端Write一次,接收端Read多次;也可以发送端Write多次,接收端Read多次。但每次传输数据最大为1460字节。
实现步骤
服务端 客户端
获取本机终结点 获取服务器终结点
创建TcpListener对象,开启侦听器 创建TcpClient对象
等待客户端连接 连接服务器
获取针对客户端连接的网络流客户端通信 通过网络流与服务器通信
…… ……
关闭连接 关闭连接
using System.Collections; using System.Collections.Generic; using System.Net.Sockets; using UnityEngine; using Common; using UnityEngine.UI; using System.Net; using System; using System.Text; /// <summary> /// TCP 客户端 发送消息 /// </summary> public class ChatTCPClientTest : MonoBehaviour { private InputField messageInput; private TcpClient tcpClient; private void Start() { var server = FindObjectOfType<ChatTCPServerTest>(); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(server.serverIP), server.serverPort); //创建终结点 tcpClient = new TcpClient(); //1. 创建Socket tcpClient.Connect(ep); ////三次握手(连接请求) //使用指定的远程网络终结点将客户端连接到TCP主机 messageInput = transform.FindChildByName("MessageInput").GetComponent<InputField>(); transform.FindChildByName("Send").GetComponent<Button>().onClick.AddListener(OnSendButtonClient); } private void OnSendButtonClient() { SendChatMessage(messageInput.text); } private void SendChatMessage(string msg) { //获取网络流 NetworkStream stream = tcpClient.GetStream(); //用于发送消息和接收消息 byte[] dgramContent = Encoding.UTF8.GetBytes(msg); //传入内容 stream.Write(dgramContent, 0, dgramContent.Length); //写入网络流 内容 从那开始发 发的长度 } /// <summary> /// 3.关闭连接/释放资源 /// </summary> private void OnApplicationQuit() { tcpClient.Close(); } }