# Unity网络服务器
在Unity内搭建一个简单的网络服务器
一个十分简单的服务开启,通过在UI按钮上关联StartServer()方法来开启服务器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Net;
using System.Net.Sockets;
public class ServerScripts : MonoBehaviour {
Socket socket;//套字节(其用于标识客户端请求的服务器和服务。)
byte[] buffer;
void Awake()
{
//开启后台运行,方便测试
Application.runInBackground = true;
}
/*
* 1.初始化套接字
* 2.确定IP地址和端口号
* 3.监听
* 4.开始接受用户连接请求
* 5.接受用户链接,开始接受数据
* 6.接受完成数据
* */
void Start()
{
buffer = new byte[1024];//初始化
}
public void StartServer()
{
if(socket !=null)
return;
//1.初始化套节字
socket = new Socket(AddressFamily.InterNetwork/*IP地址类型*/,SocketType/*双向读取数据*/,ProtocolType.Tcp/*传输数据的协议*/);
//2.绑定IP地址和端口号
//IPAddress.Any是本机IP
socket.Bind(new IPEndPoint(IPAddress.Any,23456));
//3.监听
//最大连接数
socket.listen(10)
//4.开始接收用户连接请求
socket.BeginAccept(ServerAccept,socket);
}
//接受用户连接请求的回调方法
void ServerAccept(System.IAsyncResult ar)
{
socket = ar.AsyncState as Socket;
//结束当前连接请求
Socket workingSocket = socket.EndAccept(ar);
//开始接受客户端数据
workingSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ServerRecive,workingSocket);
//4.开始接收用户连接请求
socket.BeginAccept(ServerAccept,socket);
}
//接收数据完成回调方法
void ServerRecive(System.IAsyncResuit ar)
{
socket = ar.AsyncState as Socket;
//返回当前接收到的数据字节量
int count = socket.EndReceive(ar);
string coutent = "";
if(count>0)
{
coutent = UTF8Encoding.UTF8.GetString(buffer);
}
socket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ServerRecive,socket);
}
可以通过coutent来输出接收到的数据,通过添加Text的UI来添加一些输出语句,例如“用户已链接”来更加清晰的检测是否有连接上服务器。
下篇:客户端 Client搭建
1690

被折叠的 条评论
为什么被折叠?



