一个socket可以绑定多个端口吗_开始Socket编程,在Unity里搭一个最简单的Echo程序...

网络游戏分为客户端和服务端两部分,顾名思义客户端就是运行在用户的电脑或者手机上,服务端程序运行在游戏运营商的服务器上。

多个客户端通过网络与服务端进行通信。大多数的网络游戏因为要同时处理与很多很多玩家的通信,游戏服务器通常采用分布式架构,不同的服务端负责不同区的玩家。

服务端与客户端通常使用TCP网络进行通讯。于是就要提到网络编程的基础:Socket。

网络上的两个程序要进行数据交换,是通过一个双向的通信连接实现数据交换,连接的一端称为一个Socket,而一个Socket包含了进行网络通信必需的五个信息:连接使用的协议,本地主机的IP地址,本地的协议端口,远程主机的IP地址和远程协议端口。

端口就是设备与外界通信交流的出口。而Socket就可以看作是从一台计算机的一个端口连接到另外一个计算机的端口。当两个Socket相连接时,就可以进行网络通信。

每一个进程可以拥有多个Socket,每个Socket可以通过不同的端口与其它计算机连接。每一条Socket连接(可以把Socket连接看作一条网线通过这条网线进行数据传输),代表着Socket->本地端口->网络介质->远程端口->远程Socket链路。

TCP与UDP协议

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而与之相对的UDP协议则是无连接的、不可靠的,但传输效率较高的协议。但这个专栏里的服务器实现,还是使用TCPi协议。

下面就在Unity里实现一个最基础的Echo程序,客户端向服务端发送一行文字,服务端收到消息后将文本发送回而客户端。

进入Unity之后先新建两个Button,一个是Connection,一个是SendButton,然后是一个输入框InputField和一个Text。下面是客户端的实现代码:

using 

在场景中随便拖给一个物体,然后给连接ConnectionButton绑定上Connection事件。但此时Unity会显示异常因为服务端还没有实现。

对于服务端的代码实现,每个服务端都可以大致把工作逻辑简化成:Socket创建->对创建的套接字进行绑定->开启监听,等待客户端连接->应答->接受客户端信息->回馈消息,即:

Socket->Bind->Listen->Accept->Recieve->Send

于是服务端代码实现如下:

using 

在运行服务端之后,在Unity中点击连接,再再InputField中输入要发送得文字,就可以向客户端发送输入得文本信息。

ace706d772d427fbca144e392470fd4b.png

至此,最简单的客户端与服务端程序已经实现。这也是最简单的网络通信程序。

如果要更直观地了解客户端与服务端地工作方式以及作用,只需要修改一下EchoServer里的Send代码,就可以使客户端可以直接收到服务端发来的系统时间。

//Send

下面是运行结果图:

88790c6bf868872e6ca68d9b1b846d6b.png

这只是一个开始,下面一篇文章会在这篇文章代码地基础上进行改进,实现异步和多路复用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值