新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx

上传人:b****8 文档编号:9824318 上传时间:2023-02-06 格式:DOCX 页数:6 大小:20.77KB
下载 相关 举报
新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx_第1页
第1页 / 共6页
新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx_第2页
第2页 / 共6页
新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx_第3页
第3页 / 共6页
新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx_第4页
第4页 / 共6页
新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx

《新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx》由会员分享,可在线阅读,更多相关《新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx(6页珍藏版)》请在冰豆网上搜索。

新提醒Unity3D教程实现基于Socket通讯的公共聊天室.docx

新提醒Unity3D教程实现基于Socket通讯的公共聊天室

【新提醒】【Unity3D教程:

实现基于Socket通讯的公共聊

天室】

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Net.Sockets;

namespaceTestServer

classProgram

//设置连接端口

constintportNo=500;

staticvoidMain(string[]args)

//初始化服务器IP

System.Net.IPAddresslocalAdd=

System.Net.IPAddress.Parse("127.0.0.1");

//创建TCP侦听器

TcpListenerlistener=newTcpListener(localAdd,portNo);

listener.Start();

//显示服务器启动信息

Console.WriteLine("Serverisstarting...");

while(true)

ChatClientuser=new

ChatClient(listener.AcceptTcpClient());

//显示连接客户端的IP与端口

Console.WriteLine(user._clientIP+"isjoined...");

}ChatClient.csusingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Collections;

usingSystem.Net.Sockets;

namespaceTestServerclassChatClientpublicstaticHashtableALLClients=newHashtable();//

客户列表

privateTcpClient_client;//客户端实体

publicstring_clientIP;//客户端IP

privatestring_clientNick;//客户端昵称

privateboolReceiveNick=true;

publicChatClient(TcpClientclient)this._client=client;

this._clientIP=client.Client.RemoteEndPoint.ToString();

//把当前客户端实例添加到客户列表当中

ALLClients.Add(this._clientIP,this);

client.GetStream().BeginRead(data,0,

System.Convert.ToInt32(this._client.ReceiveBufferSize),

ReceiveMessage,null);

//从客戶端获取消息

publicvoidReceiveMessage(IAsyncResultar)intbytesRead;

try

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,bytesRead);

if(ReceiveNick)this._clientNick=messageReceived;

Broadcast(this._clientNick+"hasjoinedthechat.");

//this.sendMessage("hello");

ReceiveNick=false;

else

lock(this._client.GetStream())this._client.GetStream().BeginRead(data,0,

System.Convert.ToInt32(this._client.ReceiveBufferSize),

ReceiveMessage,null);

catch(Exceptionex)

Broadcast(this._clientNick+"hasleftthechat.");

//向客戶端发送消息

publicvoidsendMessage(stringmessage)try

System.Net.Sockets.NetworkStreamns;

lock(this._client.GetStream())

ns=this._client.GetStream();

//对信息进行编码

byte[]bytesToSend=

System.Text.Encoding.ASCII.GetBytes(message);

ns.Write(bytesToSend,0,bytesToSend.Length);

ns.Flush();

catch(Exceptionex)

publicvoidBroadcast(stringmessage)

Console.WriteLine(message);

foreach(DictionaryEntrycinALLClients)

((ChatClient)(c.Value)).sendMessage(message+

Environment.NewLine);

using

}unity3d客户端的代码ClientHandler.cs:

UnityEngine;

usingSystem.Collections;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Text;

usingSystem.Net.Sockets;

publicclassClientHandler:

MonoBehaviourconstintportNo=500;

privateTcpClient_client;

byte[]data;//UsethisforinitializationvoidStart()

{}//UpdateiscalledonceperframevoidUpdate()

{}publicstringnickName="";

publicstringmessage="";

voidOnGUI()

publicstringsendMsg="";

nickName=GUI.TextField(newRect(10,10,100,20),

nickName);

message=GUI.TextArea(newRect(10,40,300,200),

message);

sendMsg=GUI.TextField(newRect(10,250,210,20),

sendMsg);if(GUI.Button(newRect(120,10,80,20),"Connect"))

//Debug.Log("hello");

this._client=newTcpClient();

this._client.Connect("127.0.0.1",portNo);

data=newbyte[this._client.ReceiveBufferSize];

//SendMessage(txtNick.Text);

SendMessage(nickName);

this._client.GetStream().BeginRead(data,0,

System.Convert.ToInt32(this._client.ReceiveBufferSize),

ReceiveMessage,null);

};if(GUI.Button(newRect(230,250,80,20),"Send"))

SendMessage(sendMsg);

sendMsg="";

};

}publicvoidSendMessage(stringmessage)try

NetworkStreamns=this._client.GetStream();

byte[]data=

System.Text.Encoding.ASCII.GetBytes(message);

ns.Write(data,0,data.Length);

ns.Flush();

catch(Exceptionex)

//MessageBox.Show(ex.ToString());

}publicvoidReceiveMessage(IAsyncResultar)tryintbytesRead;

bytesRead=this._client.GetStream().EndRead(ar);

if(bytesRead<1)return;

else

{Debug.Log(System.Text.Encoding.ASCII.GetString(data,0,bytesRead));message+=

System.Text.Encoding.ASCII.GetString(data,0,bytesRead);

this._client.GetStream().BeginRead(data,0,

System.Convert.ToInt32(this._client.ReceiveBufferSize),

ReceiveMessage,null);}

catch(Exceptionex)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1