首先创建一个服务端程序,这个程序就用VS的控制台程序做即可了。

代码例如以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;namespace SocketServer
{class Program{const int Port = 20000; //设置连接portstatic void Main(string[] args){// 初始化serverIPSystem.Net.IPAddress SocketIP = System.Net.IPAddress.Parse("127.0.0.1");// 创建TCP侦听器TcpListener listener = new TcpListener(SocketIP, Port);listener.Start();// 显示server启动信息Console.WriteLine("服务开启中...\n");// 循环接受客户端的连接请求while (true){ChatClient client = new ChatClient(listener.AcceptTcpClient());// 显示连接客户端的IP与portConsole.WriteLine(client._clientIP + " 添�...\n");}}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Net.Sockets;namespace SocketServer
{class ChatClient{public static Hashtable ALLClients = new Hashtable(); // 客户列表private TcpClient _client;  // 客户端实体public string _clientIP;   // 客户端IPprivate string _clientNick; // 客户端昵称private byte[] data;        // 消息数据private bool ReceiveNick = true;public ChatClient(TcpClient client){this._client = client;this._clientIP = client.Client.RemoteEndPoint.ToString();// 把当前客户端实例加入�到客户列表其中ALLClients.Add(this._clientIP, this);data = new byte[this._client.ReceiveBufferSize];// 从服务端获取消息client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);}// 从客戶端获取消息public void ReceiveMessage(IAsyncResult ar){int bytesRead;try{lock (this._client.GetStream()){bytesRead = this._client.GetStream().EndRead(ar);}if (bytesRead < 1){ALLClients.Remove(this._clientIP);Broadcast(this._clientNick + "离开聊天室");return;}else{string messageReceived = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);if (ReceiveNick){this._clientNick = messageReceived;Broadcast(this._clientNick + "加入聊天室");ReceiveNick = false;}else{Broadcast(this._clientNick + ":" + messageReceived);}}lock (this._client.GetStream()){this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);}}catch (Exception ex){ALLClients.Remove(this._clientIP);Broadcast(this._clientNick + "离开聊天室");}}// 向客戶端发送消息public void sendMessage(string message){try{System.Net.Sockets.NetworkStream ns;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 (Exception ex){}}// 向客户端广播消息public void Broadcast(string message){Console.WriteLine(message);foreach (DictionaryEntry c in ALLClients){((ChatClient)(c.Value)).sendMessage(message + Environment.NewLine);}}}
}

这个比較简单啊,我就直接拷贝了别人的代码,比較好理解,适合新手~~~(如有侵犯版权,请私信联系我)

接下来就是Unity这边的代码了~

代码例如以下:

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Net.Sockets;public class ScoketClient : MonoBehaviour
{const int Port = 20000;//port号与服务端port相应private TcpClient client;byte[] data;public string UserName = "";//usernamepublic string message = "";//聊天内容public string sendMsg = "";//输入框void OnGUI(){UserName = GUI.TextField(new Rect(10, 10, 100, 20), UserName);message = GUI.TextArea(new Rect(10, 40, 300, 200), message);sendMsg = GUI.TextField(new Rect(10, 250, 210, 20), sendMsg);if (GUI.Button(new Rect(120, 10, 80, 20), "连接server")){this.client = new TcpClient();this.client.Connect("127.0.0.1", Port);data = new byte[this.client.ReceiveBufferSize];SendSocket(UserName);this.client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this.client.ReceiveBufferSize), ReceiveMessage, null);};if (GUI.Button(new Rect(230, 250, 80, 20), "发送")){SendSocket(sendMsg);sendMsg = "";};}public void SendSocket(string message){try{NetworkStream ns = this.client.GetStream();byte[] data = System.Text.Encoding.ASCII.GetBytes(message);ns.Write(data, 0, data.Length);ns.Flush();}catch (Exception ex){}}public void ReceiveMessage(IAsyncResult ar){try{int bytesRead;bytesRead = this.client.GetStream().EndRead(ar);if (bytesRead < 1){return;}else{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){}}
}

这样就能够了~先开启服务端,然后在用client连接。

这里用的编码是ASCII。假设想用中文的话改成UTF-8,或者GB2312。

转载于:https://www.cnblogs.com/hrhguanli/p/3946884.html

【Unity3D自学记录】Unity3D网络之Socket聊天室初探相关推荐

  1. Linux socket聊天室

    目录 一.运行效果 1.分别编译客户端和服务端代码 2.运行 3.使用效果 二.代码 chat.h 服务端代码 客户端代码 一.运行效果 1.分别编译客户端和服务端代码 gcc client.c -o ...

  2. java仿聊天室项目总结_Java团队课程设计-socket聊天室(个人总结)

    Java团队课程设计-socket聊天室(个人总结) 一.团队课程设计博客链接 二.本人负责模块或任务说明 任务1 服务端对socket线程的接受以及对客户端的数据转发操作 任务2 数据库的查找,添加 ...

  3. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)

    Java团队课程设计-socket聊天室(Day4总结篇) 团队名称: ChatRoom 项目git地址: git提交记录(仅截取部分): 面向对象设计包图.类图 包图 UML类图 总结: 首先总结一 ...

  4. 【计算机网络】Socket聊天室程序

    计算机网络第一次实验报告 实验名称:Socket聊天室程序 实验内容 使用流式Socket设计聊天协议,聊天信息带有时间标签和类型标签,本报告中将说明交互消息的类型.语法.语义.时序等具体的消息处理方 ...

  5. 从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4

    前面文章链接如下: <从0实现基于Linux socket聊天室-多线程服务器模型-1> <从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2> &l ...

  6. 基于C#的socket聊天室(附源码)

    基于C#-socket聊天室 前言 源代码:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tcha ...

  7. Python实现网络多人聊天室

    网络多人聊天室 相关连接:Python实现网络图形化界面多人聊天室 文件结构: chatroom ├── client.py  # 客户端代码 ├── language.py  # 语言文件 ├── ...

  8. C#+Socket 聊天室(实现公网通信 客户端-服务器端-客户端)

    文章目录 简述 功能演示视频(b站) 准备工作 服务器端 服务器端界面 服务器端代码 客户端 客户端界面 客户端代码 总结 简述 关于Socket的原理我就不在这里赘述了,有大佬已经作详细的说明了: ...

  9. 网络编程项目(聊天室项目)

    一.实现目标 一个在Linux下可以使用的聊天软件,要求至少实现如下功能: 1. 采用Client/Server架构 2. Client A 登陆聊天服务器前,需要注册自己的ID和密码 3. 注册成功 ...

最新文章

  1. Java多线程(九)—— interrupt()和线程终止方式
  2. PST文件的读取(待整理)
  3. 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...
  4. alientek 3.5寸tftlcd模块资料_电冰箱触摸屏提高设备档次,深圳3.5寸人机界面厂家...
  5. Transformer提效之路干货笔记——一文梳理各种魔改版本Transformer
  6. 拓端tecdat|Matlab用BUGS马尔可夫区制转换Markov switching随机波动率SV模型、序列蒙特卡罗SMC、Metropolis Hastings采样分析时间序列数据
  7. [C/C++] C++笔试常见问题
  8. RemObjects Remoting SDK-SEO狼术
  9. 网络工程师常见面试题,1分钟就能看完
  10. 百度坐标拾取html,百度地图API获取地址拾取坐标代码
  11. scrum master_你能使我成为一个scrum master吗
  12. 小彩蛋:springboot banner 在线生成
  13. PowerBI-时间智能函数-PARALLELPERIOD
  14. 使用Onekey Ghost安装器一键还原系统的方法
  15. 全微分 与 方向导数
  16. bump map(凹凸贴图)的一个简单生成方法
  17. oracle入门学习
  18. 使用PowerApps制作请假系统(一)--创建SharePoint列表以及PowerApps主题部分
  19. ifix自定义声音报警(自动执行脚本)
  20. tcpdump抓包工具离线安装和使用

热门文章

  1. ctc网络结构中接口服务器信号交换的方式有哪些,通信工程复习资料
  2. 显示所有大写字母python_python 输出所有大小写字母的方法
  3. h5下划线怎么设置_【Word技巧】毕业论文封面那条永远对不齐的下划线?
  4. python 字符串的(乘法和in)(一分钟读懂)
  5. python 缺省参数_week04_python函数缺省值
  6. python属于哪类型的编程语言_Python是什么类型的编程语言,有什么特性
  7. 计算机算法设计与分析 最长递增子序列
  8. 数组模拟乘法(大数乘法)
  9. AcWing 1054. 股票买卖
  10. ~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)