Unity TCP网络-多人实时聊天

今天我们用TCP协议做一个多人实时聊天。

首先我们需要创建两个工程,一个为客户端,一个为服务端。两者是什么区别呢?

服务端开启服务就可以了,客户端要找到服务端并连接它。

客户端就代表一个人,它可以发送自己要说的话。

服务端是起到广播,中转的作用。收到其中某个客户端发送的消息,将他转发给所有的客户端,就达到多人聊天的效果了。

我们从客户端开始入手

一.客户端

首先网络通信要确定IP跟Port(端口号)

提前创建二进制数组,方便收到消息的时候接受

1.定义变量

2.建立连接方法

socket三个参数代表:网络,采用数据流形式,使用TCP协议

Begin开头的函数,代表异步函数。传入对应的IP,Port

使用try catch结构,如果连接失败,会输出失败的信息

ConnectCallback是当成功连接到服务端的时候,会执行这个回调函数

socket.EndConnect(ar); 不是结束连接,而是确认连接操作的结果并准备好使用该套接字进行后续的通信。

    socket.BeginReceive(readBuff, 0, 1024, 0, ReceiveCallback, socket);是当收到消息时,会将受到的字节数存储到readBuff中,从0位开始存入,最多支持1024字节,接收的标志通常为0,ReceiveCallback为收到回调

EndRecive会结束异步接收操作,因此我们在下面再次开启接收,这样就可以一直收到消息。(如果这里不在进行socket.BeginReceive(readBuff, 0, 1024, 0, ReceiveCallback, socket)函数,那么在收到第一次的消息后,后面就不会再监听消息了)

3.发送消息

将文本内容转为二进制发送给服务端

4.关闭客户端

二.服务端

服务端端跟客户端的接收、发送都是类似的

我们可以根据上面的那个流程图执行对应的步骤,先开始绑定IP,Port

1.应答回调

这里的可以获取到对应的客户端socket,然后将客户端socket存储起来,再发送的时候,遍历每一个客户端socket就达到了广播的作用

这里再拿到监听的结果后,跟客户端一样,再次开启监听,就能连接上多个客户端。(注销掉     serverSocket.BeginAccept(AcceptCallback, serverSocket)就只能一个客户端连接上服务端,后续服务端就不在监听了)

2.广播消息

这里大家可以试试,如果在客户端发送close方法,服务端就会移除对应的客户端

三.效果演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值