1、新提醒Unity3D教程实现基于Socket通讯的公共聊天室【新提醒】【Unity3D教程:实现基于 Socket通讯的公共聊天室】using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;namespace TestServerclass Program/ 设置连接端口const int portNo = 500;static void Main(string args)/ 初始化服务器 IPSystem.Net.IPAddress lo
2、calAdd =System.Net.IPAddress.Parse(127.0.0.1);/ 创建 TCP 侦听器TcpListener listener = new TcpListener(localAdd, portNo);listener.Start();/ 显示服务器启动信息Console.WriteLine(Server is starting.);while (true)ChatClient user = newChatClient(listener.AcceptTcpClient();/ 显示连接客户端的 IP 与端口Console.WriteLine(user._client
3、IP + is joined.);ChatClient.cs using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;using System.Net.Sockets;namespace TestServer class ChatClient public static Hashtable ALLClients = new Hashtable(); /客户列表private TcpClient _client; / 客户端实体public
4、 string _clientIP; / 客户端 IPprivate string _clientNick; / 客户端昵称private bool ReceiveNick = true;public ChatClient(TcpClient client) this._client = client;this._clientIP = client.Client.RemoteEndPoint.ToString();/ 把当前客户端实例添加到客户列表当中ALLClients.Add(this._clientIP, this);client.GetStream().BeginRead(data,
5、0,System.Convert.ToInt32(this._client.ReceiveBufferSize),ReceiveMessage, null);/ 从客戶端获取消息public void ReceiveMessage(IAsyncResult ar) int bytesRead;trybytesRead = this._client.GetStream().EndRead(ar);if (bytesRead < 1)ALLClients.Remove(this._clientIP);Broadcast(this._clientNick + has left the chat
6、);return;elsestring messageReceived =System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);if (ReceiveNick) this._clientNick = messageReceived;Broadcast(this._clientNick + has joined the chat.);/this.sendMessage(hello);ReceiveNick = false;elselock (this._client.GetStream() this._client.GetStream(
7、).BeginRead(data, 0,System.Convert.ToInt32(this._client.ReceiveBufferSize),ReceiveMessage, null);catch (Exception ex)Broadcast(this._clientNick + has left the chat.);/ 向客戶端发送消息public void sendMessage(string message) trySystem.Net.Sockets.NetworkStream ns;lock (this._client.GetStream()ns = this._clie
8、nt.GetStream();/ 对信息进行编码byte bytesToSend =System.Text.Encoding.ASCII.GetBytes(message);ns.Write(bytesToSend, 0, bytesToSend.Length);ns.Flush();catch (Exception ex)public void Broadcast(string message)Console.WriteLine(message);foreach (DictionaryEntry c in ALLClients)(ChatClient)(c.Value).sendMessag
9、e(message +Environment.NewLine);usingunity3d 客户端的代码 ClientHandler.cs :UnityEngine;using System.Collections;using System;using System.Collections.Generic;using System.ComponentModel;using System.Text;using System.Net.Sockets;public class ClientHandler : MonoBehaviour const int portNo = 500;private Tc
10、pClient _client;byte data; / Use this for initialization void Start () / Update is called once per frame void Update () public string nickName = ;public string message = ;void OnGUI()public string sendMsg = ;nickName = GUI.TextField(new Rect(10, 10, 100, 20),nickName);message = GUI.TextArea(new Rect
11、(10, 40, 300, 200),message);sendMsg = GUI.TextField(new Rect(10, 250, 210, 20),sendMsg); if(GUI.Button(new Rect(120, 10, 80, 20), Connect)/Debug.Log(hello);this._client = new TcpClient();this._client.Connect(127.0.0.1, portNo);data = new bytethis._client.ReceiveBufferSize;/SendMessage(txtNick.Text);
12、SendMessage(nickName);this._client.GetStream().BeginRead(data, 0,System.Convert.ToInt32(this._client.ReceiveBufferSize),ReceiveMessage, null); if(GUI.Button(new Rect(230, 250, 80, 20), Send)SendMessage(sendMsg);sendMsg = ; public void SendMessage(string message) tryNetworkStream ns = this._client.Ge
13、tStream();byte data =System.Text.Encoding.ASCII.GetBytes(message);ns.Write(data, 0, data.Length);ns.Flush();catch (Exception ex)/MessageBox.Show(ex.ToString(); public void ReceiveMessage(IAsyncResult ar) try int bytesRead;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 (Exception ex)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1