Unity网络通讯学习

---部分截图来自 siki学院Unity网络通讯课程

Socket

网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个 Socket ,Socket 包含了网络通信必须的五种信息

Socket 例子{

协议: TCP

本地: IP ,端口

远程: IP ,端口

}

可以通过ipconfig,netstat -ano 查看 Ip 和端口

创建客户端连接服务端

客户端代码:

cs 复制代码
using System;
using System.Net.Sockets;

namespace wangluo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个Socket 需要using System.Net.Sockets;
            Socket tempClient = new Socket(AddressFamily.InterNetwork,
                  SocketType.Stream, ProtocolType.Tcp);
            tempClient.Connect("127.0.0.1", 8888);
        }
    }
}

服务端代码:

cs 复制代码
using System;
using System.Net.Sockets;
using System.Net;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket tempServer = new Socket(AddressFamily.InterNetwork, 
                 SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint tempEndPoint = 
                  new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  
                   //using System.Net;
            tempServer.Bind(tempEndPoint);  //绑定端口
            tempServer.Listen(0);  //监听,0表示挂起的队列无限长
            Console.WriteLine("服务端启动成功");

            Socket tempConnectClient = tempServer.Accept();
            Console.WriteLine("客户端连接成功:" + tempConnectClient);
        }
    }
}

先开启服务端再开启客户端

客户端服务端互发信息

客户端代码:

cs 复制代码
using System;
using System.Net.Sockets;
using System.Text;

namespace wangluo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个Socket 需要using System.Net.Sockets;
            Socket tempClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            tempClient.Connect("127.0.0.1", 8888);

            //客户端向服务端发信息
            string tempSendInfo = Console.ReadLine();
            //将字符串转换成 buffer
            byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
            //发送信息
            tempClient.Send(tempSendData);
            
            //接收来自服务端的信息
            byte[] tempReadBuffer = new byte[1024];
            tempClient.Receive(tempReadBuffer);
            string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
            Console.WriteLine("接收到服务端信息:" + tempReadString);
        }
    }
}

服务端代码:

cs 复制代码
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket tempServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  //using System.Net;
            tempServer.Bind(tempEndPoint);  //绑定端口
            tempServer.Listen(0);  //监听,0表示挂起的队列无限长
            Console.WriteLine("服务端启动成功");

            Socket tempConnectClient = tempServer.Accept();
            Console.WriteLine("客户端连接成功:" + tempConnectClient);

            byte[] tempReadBuffer = new byte[1024];
            tempConnectClient.Receive(tempReadBuffer);
            //将 byte 转换成字符串
            string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
            Console.WriteLine("接收到客户端信息:" + tempReadString);

            //服务端向客户端发信息
            string tempSendInfo = Console.ReadLine();
            byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
            tempConnectClient.Send(tempSendData);
        }
    }
}

封装一下代码:

客户端:

cs 复制代码
using System;
using System.Net.Sockets;
using System.Text;

namespace wangluo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个Socket 需要using System.Net.Sockets;
            Socket tempClient = CreateSocket();

            tempClient.Connect("127.0.0.1", 8888);

            Send(tempClient);

            Receive(tempClient);
            
        }

        static Socket CreateSocket()
        {
            return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }

        static void Send(Socket tempClient)
        {
            //客户端向服务端发信息
            string tempSendInfo = Console.ReadLine();
            //将字符串转换成 buffer
            byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
            //发送信息
            tempClient.Send(tempSendData);
        }

        static void Receive(Socket tempClient)
        {
            //接收来自服务端的信息
            byte[] tempReadBuffer = new byte[1024];
            tempClient.Receive(tempReadBuffer);
            string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
            Console.WriteLine("接收到服务端信息:" + tempReadString);
        }
    }
}

服务端:

cs 复制代码
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket tempServer = CreateSocket();
            BindAndListen(tempServer);

            Socket tempConnectClient = Accept(tempServer);

            Receive(tempConnectClient);

            Send(tempConnectClient);
        }

        static Socket CreateSocket()
        {
            return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }

        static void BindAndListen(Socket pSocket)
        {
            IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  //using System.Net;
            pSocket.Bind(tempEndPoint);  //绑定端口
            pSocket.Listen(0);  //监听,0表示挂起的队列无限长
            Console.WriteLine("服务端启动成功");
        }

        static Socket Accept(Socket pSocket)
        {
            Socket tempConnectClient = pSocket.Accept();
            Console.WriteLine("客户端连接成功:" + tempConnectClient);
            return tempConnectClient;
        }

        static void Receive(Socket pSocket)
        {
            byte[] tempReadBuffer = new byte[1024];
            pSocket.Receive(tempReadBuffer);
            //将 byte 转换成字符串
            string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
            Console.WriteLine("接收到客户端信息:" + tempReadString);
        }

        static void Send(Socket pSocket)
        {
            //服务端向客户端发信息
            string tempSendInfo = Console.ReadLine();
            byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
            pSocket.Send(tempSendData);
        }
    }
}

Socket 代码解析:

AddressFamily: InterNetwork 使用IPv4 InterNetworkV6 使用IPv6

SocketType:

相关推荐
weixin_6042366715 小时前
华三 路由器 极简核心配置
运维·服务器·网络·h3c·h3c路由器
换个昵称都难19 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
youngerwang20 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
智慧光迅AINOPOL1 天前
校园在线巡课系统方案:督导全覆盖
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
酉鬼女又兒1 天前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
Urbano1 天前
工装制作全流程科普:从面料到自动化生产
网络·人工智能
2401_868534781 天前
网规笔记 | 真题解析:2018年11月软考网规-网络安全案例分析
网络
Gauss松鼠会1 天前
【GaussDB】GaussDB重要通信参数汇总
服务器·网络·数据库·sql·性能优化·gaussdb·经验总结
超级无敌zhq1 天前
后渗透痕迹清理:攻防对抗中的隐身术
网络·数据库·网络安全
“初生”1 天前
Codex 桌面端新会话 5 次 Reconnecting 怎么办?HTTP/SSE 完美修复方案(2026最新)
网络·网络协议·http