Unity网络编程一: 基于Socket搭建一个服务器
为了实现Unity与服务器进行数据传输,需要在本地搭建一个服务器,作为服务器端来实现数据的接受与发送,本次使用Socket来实现
开发环境:
- VS 2019
- .Net
- Unity2019;
Socket简介
Socket
主要是用来在两个应用程序之间建立通信,利用这一点,我们可以在服务端与客户端之间进行数据交换,基于这样的原理,我们使用Socket
将本机作为服务器来与Unity客户端进行连接
Socket在使用时需要在服务端与客户端分别建立通信接口,这样就可以通过其完成通信与数据交换
服务器端的Socket(至少需要两个)
- 第一个负责接收客户端连接请求(但不负责与客户端通信),每成功接收到客户端的连接便在服务器端产生一个对应的复杂通信的Socket
- 第二个在接收到客户端连接时创建, 为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信)
客户端的Socket
- 必须指定要连接的服务器地址和端口,通过创建一个Socket对象来初始化一个到服务器端的连接
具体通信过程为:
服务器端:
1,首先申请一个socket,作为服务器端接口
2,绑定到一个IP地址和一个端口上
3,开启侦听,等待接收连接
客户端:
1,首先申请一个socket来作为客户端
2,连接服务器(指明IP地址和端口号):
3,发送信息给服务器端
一、新建一个项目
打开Vs2019新建一个项目,随便选择控制台应用即可,然后对项目进行命名和保存项目路径,这样就完成了一个基本项目的创建。
二、新建一个类作为服务器创建启动
首先创建一个类CreateServer
作为服务器启动类
要使用Socket首先需要引入两个命名空间:
using System.Net;
using System.Net.Sockets;
三、构造函数获取类需要的参数
然后就可以定义一个Scoket
变量,为了实现服务器的创建,需要两个关键参数,就是IP
地址和端口号port
,我们使用构造函数来接受这两个参数,就可以在类的实例化时直接输入即可:
private string ip;private int port;public CreateServer(string _ip, int _port){this.ip = _ip;this.port = _port;}
四、开启Socket
定义一个方法StartConnent()
来开启服务器
在方法内首先定义一个socket并对其进行实例化,主要的三个枚举参数为:
AddressFamily
:地址类型,协议族SocketType
:Socket类型ProtocolType
:传输协议
完成socket
的创建后,就是要写入服务器的的ip
地址和端口号,使用IPEndPoint
来完成
最后使用Bind()
方法绑定,并设最大连接数量即可
private Socket socket=null;public Socket StartConnent(){ try{socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ip), port);socket.Bind(iep);socket.Listen(1000);Console.WriteLine("服务器开启成功!");}catch (Exception e){Console.WriteLine("服务器开启失败,原因为:"+e.ToString());}return socket;}
五、关闭Socket
要关闭Socket
可以直接使用Close()
方法来关闭,但是在关闭前要注意关闭双向的连接,使用socket.Shutdown(SocketShutdown.Both)
来完成:
public void CloseSocket(Socket socket){//禁用某 Socket 上的发送和接收,Both代表双向关闭socket.Shutdown(SocketShutdown.Both);//直接关闭服务socket.Close();}
六、在main()函数启动调用即可
对于刚刚创建的服务器类进行实例化,并调用服务器启动方法即可,注意我们刚刚定义的两个参数,由于在本地搭建,则使用127.0.0.1作为ip地址,在1到65535之间(尽量再1024端口之后)选择一个没用过的作为端口号即可:
static void Main(string[] args){CreateServer server = new CreateServer("127.0.0.1", 30000);server.StartConnent();Console.ReadKey()}
六、运行程序,开启服务器即可
显示结果如图,则服务器启动成功:
附源码:
服务器连接类:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;namespace ServerDemo
{class CreateServer{//服务器地址和端口号private string ip;private int port;private Socket socket = null;/// <summary>/// 构造函数获取服务器地址和端口号/// </summary>/// <param name="_ip"></param>/// <param name="_port"></param>public CreateServer(string _ip, int _port){this.ip = _ip;this.port = _port;}/// <summary>/// 创建Socket,并开启监控/// </summary>/// <returns></returns>public Socket StartSocket(){try{socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ip), port);socket.Bind(iep);socket.Listen(1000);Console.WriteLine("服务器开启成功!");}catch (Exception e){Console.WriteLine("服务器开启失败,原因为:"+e.ToString());}return socket;}public void CloseSocket(Socket socket){//禁用某 Socket 上的发送和接收,Both代表双向关闭socket.Shutdown(SocketShutdown.Both);//直接关闭服务socket.Close();}}
}
直接在默认执行类Program中调用即可:
using System;namespace ServerDemo
{class Program{static void Main(string[] args){CreateServer server = new CreateServer("127.0.0.1", 30000);server.StartConnent();server.CloseSocket;z`}}
}
Unity网络编程一: 基于Socket搭建一个服务器相关推荐
- windows socket网络编程一:最简单的服务器和客户端搭建
文章目录 简介 服务器 网络版本 1.打开网络库 2.校验版本 3.创建socket 4.绑定地址和端口 5.监听 6.接受链接 7.与客户端收发消息 客户端 1.打开网络库 2.校验版本 3.创建s ...
- socket recv 服务端阻塞 python_网络编程(基于socket编程)
网络编程(基于socket编程) socket套接字:应用程序通常通过socket"套接字"向网络发送请求或应答网络请求,是主机间或同一计算机中的进程间相互通讯 socket是介于 ...
- linux网络编程一:主机字节序与网络字节序的的判断
linux网络编程一:主机字节序与网络字节序的的判断(1)现代CPU的累加器一次能装载至少4字节(32位),即一个整数.那么这4字节在内存中排列的顺序将影响它被累加器装载成的整数值,这就是字节序问题 ...
- 我的Serverless实战—基于Serverless搭建一个简单的WordPress个人博客图文详解-JJZ
文正在参与 "100%有奖 | 我的Serverless 实战"征稿活动 活动链接:https://marketing.csdn.net/p/15940c87f66c68188cf ...
- 网络编程(基于socket接口技术的进程间通信)接上一篇文章补充
目录 一.网络编程(基于socket接口技术) 1.基于TCP协议的网络通信 编程模型: 2.基于UDP通信协议的网络通信 编程模型: 3.新增函数: 大小端数据转换函数: ip地址转换函数: TCP ...
- 基于socket实现FTP服务器
基于socket实现FTP服务器 前言 基于socket完成了一个FTP服务器,实现了其基本功能 环境 操作系统:Windows 10企业版 LTSC 开发语言:C++ 开发工具:Visual Stu ...
- 基于Socket的游戏服务器通信框架的设计与实现
博客地址:blog.liujunliang.com.cn 开发工具:VS2017.Unity2017 本文介绍使用Socket/TCP来开发客户端与服务器端通信框架 博主使用过PhotonServer ...
- 在自己的电脑上搭建一个服务器
我们平常学习时经常会写一下javaweb程序,我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之 ...
- 如何快速用node在本地搭建一个服务器
众所周知,服务器是通过安装特殊的软件(或者运行特殊的代码)来提供网络服务的机器.那么我们的电脑可不可以弄成一个服务器,来供他人访问呢? 答案是可以的,这里我们需要按照一下node.js这个软件.具体按 ...
- 用python搭建一个服务器
用python搭建一个服务器 新建一个python文件(要跟服务器的update文件同级),用来开启服务,命名为:server.py 写入python代码: import SimpleHTTPServ ...
最新文章
- 在Sharepoint 2007 整合Discuz Nt论坛
- 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)
- java中把map转换成list
- 深入理解C++的动态绑定和静态绑定
- 算法复习第三章分治法
- C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录
- python 绘制简易折线图
- [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除...
- mysql是单核吗_一次单核CPU占用过高问题的处理
- 在VMware安装Ubuntu 16.04
- Maven将本地jar包推到本地仓库 mvn install:install-file maven命令使用教程
- 寻找生态位置,中小险企破局生态建设——保险生态建设
- IMS:InputChannel通过socket发送Input给App
- python学习:向Firebird数据库表中插入数据
- Linux基础入门之内外命令讲解篇
- ECCV2018 | PKT_概率知识蒸馏
- 爬楼梯,假设你正在爬楼梯,需要 n 步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶?
- 如何制作电视展示艺术品(或全家福)
- 用“电子政务”建设电子政务
- mapbox-gl-draw改造,支持绘制时实时显示面积
热门文章
- 一起来看流星雨在线观看/在线播放/全集下载/在线直播全集
- 计算机专业英语思维导图
- 软件评测师--第17小时 功能测试
- 富士施乐Fuji Xerox DocuPrint M255 z 驱动
- 计算机外设解决方案,瑞昱在2007 IDF上展出多款计算机外设产品解决方案
- 谷歌宣布退出中国 google.cn已经关闭
- S7-1500 CPU、显示器、ET 200SP CPU 和 ET 200pro CPU 的固件更新方法
- 攻防世界misc高手进阶区funny_video完整版答案
- 能上QQ但是打不开网页
- android系统解压zip文件,如何在Android手机上解压缩rar / zip文件