




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
由于这段时间比较忙,所以也很久没发布过新的教程,这几天刚好要为一个项目写服务端程序,所以顺便也在Unity3d里面实现了一个简单的客户端,多个客户端一同使用就是一个简单的公共聊天室了。服务端为一个控制台程序使用C#实现,当然,在Unity3d中也相应地使用了C#语言实现客户端,服务端和客户端能实现消息的互通,当服务端接收到某客户端发送过来的消息时将会对客户端列表成员进行广播,这是公共聊天室的最基本的形式。Socket通讯是网络游戏最为基础的知识,因此这个实例能向有志投身于网游行业的初学者提供指导意义。这篇文章来自狗刨学习网Program.cs1. using System;2. using System.Collections.Generic;3. using System.Linq;4. using System.Text;5. using System.Net.Sockets;6.7. namespace TestServer8. 9. class Program10. 11. / 设置连接端口12. const int portNo = 500;13.14. static void Main(string args)15. 16. / 初始化服务器IP17. System.Net.IPAddress localAdd = System.Net.IPAddress.Parse();18.19. / 创建TCP侦听器20. TcpListener listener = new TcpListener(localAdd, portNo);21.22. listener.Start();23.24. / 显示服务器启动信息25. Console.WriteLine(Server is starting.n);26.27. / 循环接受客户端的连接请求28. while (true)29. 30. ChatClient user = new ChatClient(listener.AcceptTcpClient();31.32. / 显示连接客户端的IP与端口33. Console.WriteLine(user._clientIP + is joined.n);34. 35. 36. 37. 复制代码ChatClient.cs1. using System;2. using System.Collections.Generic;3. using System.Linq;4. using System.Text;5. using System.Collections;6. using System.Net.Sockets;7.8. namespace TestServer9. 10. class ChatClient11. 12. public static Hashtable ALLClients = new Hashtable(); / 客户列表13.14. private TcpClient _client;/ 客户端实体15. publicstring _clientIP; / 客户端IP16. private string _clientNick; / 客户端昵称17.18. private byte data; / 消息数据19.20. private bool ReceiveNick = true;21.22. public ChatClient(TcpClient client)23. 24. this._client = client;25.26. this._clientIP = client.Client.RemoteEndPoint.ToString();27.28. / 把当前客户端实例添加到客户列表当中29. ALLClients.Add(this._clientIP, this);30.31. data = new bytethis._client.ReceiveBufferSize;32.33. / 从服务端获取消息34. client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);35. 36.37. / 从客戶端获取消息38. public void ReceiveMessage(IAsyncResult ar)39. 40. int bytesRead;41.42. try43. 44. lock (this._client.GetStream()45. 46. bytesRead = this._client.GetStream().EndRead(ar);47. 48.49. if (bytesRead + messageReceived);74.75. 76. 77.78. lock (this._client.GetStream()79. 80. this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);81. 82. 83. catch (Exception ex)84. 85. ALLClients.Remove(this._clientIP);86.87. Broadcast(this._clientNick + has left the chat.);88. 89. 90.91. / 向客戶端发送消息92. public void sendMessage(string message)93. 94. try95. 96. System.Net.Sockets.NetworkStream ns;97.98. lock (this._client.GetStream()99. 100. ns = this._client.GetStream();101. 102.103. / 对信息进行编码104. byte bytesToSend = System.Text.Encoding.ASCII.GetBytes(message);105.106. ns.Write(bytesToSend, 0, bytesToSend.Length);107. ns.Flush();108. 109. catch (Exception ex)110. 111. 112. 113. 114.115. / 向客户端广播消息116. public void Broadcast(string message)117. 118. Console.WriteLine(message);119.120. foreach (DictionaryEntry c in ALLClients)121. 122. (ChatClient)(c.Value).sendMessage(message + Environment.NewLine);123. 124. 125.126. 127. 复制代码Unity3d客户端的代码ClientHandler.cs:1. using UnityEngine;2. using System.Collections;3.4. using System;5. using System.Collections.Generic;6. using System.ComponentModel;7. using System.Text;8. using System.Net.Sockets;9.10. public class ClientHandler : MonoBehaviour11. 12. const int portNo = 500;13. private TcpClient _client;14. byte data;15. 16. / Use this for initialization17. void Start ()18. 19. 20. 21. 22. / Update is called once per frame23. void Update ()24. 25. 26. 27. 28. public string nickName = ;29. public string message = ;30. public string sendMsg = ;31. 32. void OnGUI()33. 34. nickName = GUI.TextField(new Rect(10, 10, 100, 20), nickName);35. message = GUI.TextArea(new Rect(10, 40, 300, 200), message);36. sendMsg = GUI.TextField(new Rect(10, 250, 210, 20), sendMsg);37. 38. if(GUI.Button(new Rect(120, 10, 80, 20), Connect)39. 40. /Debug.Log(hello);41. 42. this._client = new TcpClient();43. this._client.Connect(, portNo);44.45. data = new bytethis._client.ReceiveBufferSize;46.47. /SendMessage(txtNick.Text);48. SendMessage(nickName);49.50. this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);51. ;52. 53. if(GUI.Button(new Rect(230, 250, 80, 20), Send)54. 55. SendMessage(sendMsg);56. sendMsg = ;57. ;58. 59. 60. public void SendMessage(string message)61. 62. try63. 64. NetworkStream ns = this._client.GetStream();65.66. byte data = System.Text.Encoding.ASCII.GetBytes(message);67.68. ns.Write(data, 0, data.Length);69. ns.Flush();70. 71. catch (Exception ex)72. 73. /MessageBox.Show(ex.ToString();74. 75. 76. 77. public void ReceiveMessage(IAsyncResult ar)78. 79. try80. 81. int bytesRead;82.83. bytesRead = this._client.GetStream().EndRead(ar);84.85. if (bytesRead 1)86. 87. return;88. 89. else90. 91. 92. Debug.Log(System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);93. 94. messa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025房地产代理销售协议书:生态住宅区代理服务
- 2025标准小型厂房租赁合同及配套设施租赁及维护服务范本
- 2025版砂厂环保设备安装与运行承包服务协议
- 河北省崇礼县2025年上半年公开招聘城市协管员试题含答案分析
- 2025第十一章:国际物流货物保险合同-全面风险控制
- 2025版全新幼儿园场地租赁及幼儿家长活动服务协议
- 2025版光伏发电项目前期物业管理服务合同范本
- 2025版科技研发中心前期物业服务合同范本
- 2025电子商务电子合同法律效力认定与执行合同
- 2025年度会议中心租赁服务合同书
- 《紫藤萝瀑布》《丁香结》《好一朵木槿花》
- 2023柔性棚洞防护结构技术规程
- 浙江工业大学学生综合测评分细则
- 河流地貌的发育 - 侵蚀地貌
- 离网光伏发电系统详解
- 英语初高中衔接音标
- 广告文案写作(第二版)全套教学课件
- 《国家电网公司电力安全工作规程(配电部分)》
- 金融学黄达ppt课件9.金融市场
- GB/T 3758-2008卡套式管接头用锥密封焊接接管
- GA/T 1105-2013信息安全技术终端接入控制产品安全技术要求
评论
0/150
提交评论