unity3d游戏开发之实现基于Socket通讯的公共聊天室.doc
上传人:qw****27 上传时间:2024-09-11 格式:DOC 页数:9 大小:236KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

unity3d游戏开发之实现基于Socket通讯的公共聊天室.doc

unity3d游戏开发之实现基于Socket通讯的公共聊天室.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

由于这段时间比较忙,所以也很久没发布过新的教程,这几天刚好要为一个项目写服务端程序,所以顺便也在Unity3d里面实现了一个简单的客户端,多个客户端一同使用就是一个简单的公共聊天室了。服务端为一个控制台程序使用C#实现,当然,在Unity3d中也相应地使用了C#语言实现客户端,服务端和客户端能实现消息的互通,当服务端接收到某客户端发送过来的消息时将会对客户端列表成员进行广播,这是公共聊天室的最基本的形式。Socket通讯是网络游戏最为基础的知识,因此这个实例能向有志投身于网游行业的初学者提供指导意义。这篇文章来自HYPERLINK"http://www.gopedu.com/"狗刨学习网Program.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net.Sockets;namespaceTestServer{classProgram{//设置连接端口constintportNo=500;staticvoidMain(string[]args){//初始化服务器IPSystem.Net.IPAddresslocalAdd=System.Net.IPAddress.Parse("127.0.0.1");//创建TCP侦听器TcpListenerlistener=newTcpListener(localAdd,portNo);listener.Start();//显示服务器启动信息Console.WriteLine("Serverisstarting...\n");//循环接受客户端的连接请求while(true){ChatClientuser=newChatClient(listener.AcceptTcpClient());//显示连接客户端的IP与端口Console.WriteLine(user._clientIP+"isjoined...\n");}}}}复制代码ChatClient.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Collections;usingSystem.Net.Sockets;namespaceTestServer{classChatClient{publicstaticHashtableALLClients=newHashtable();//客户列表privateTcpClient_client;//客户端实体publicstring_clientIP;//客户端IPprivatestring_clientNick;//客户端昵称privatebyte[]data;//消息数据privateboolReceiveNick=true;publicChatClient(TcpClientclient){this._client=client;this._clientIP=client.Client.RemoteEndPoint.ToString();//把当前客户端实例添加到客户列表当中ALLClients.Add(this._clientIP,this);data=newbyte[this._client.ReceiveBufferSize];//从服务端获取消息client.GetStream().BeginRead(data,0,System.Convert.ToInt32(this._client.ReceiveBufferSize),ReceiveMessage,null);}//从客戶端获取消息publicvoidReceiveMessage(IAsyncResultar){intbytesRead;try{lock(this._client.GetStream()){bytesRead=this._client.GetStream().EndRead(ar);}if(bytesRead<1){ALLClients.Remove(this._clientIP);Broadcast(this._clientNick+"hasleftthechat");return;}else{stringmessageReceived=System.Text.Encoding.ASCII.GetString(data,0,bytesRea