当前位置: 首页 > news >正文

【Unity】使用Socket建立客户端和服务端并进行通信的例子

Socket服务端:

using System;

using System.Collections.Generic;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

public class SocketServer

{

public static Socket listenSocket;//监听Socket

public static List<Socket> clientList = new List<Socket>();//客户端列表

static void Main(string[] args)

{

//创建监听Socket,并绑定ip

listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555);

listenSocket.Bind(ip);

//设定监听最大数量

listenSocket.Listen(100);

Thread thread = new Thread(Listen);

thread.IsBackground = true;

thread.Start();

Console.ReadKey();

}

static void Listen()

{

Console.WriteLine("开始监听");

while(true)

{

//开始监听,若监听到访问则创建一个Socket表示与其的连接

Socket newSocket = listenSocket.Accept();

Console.WriteLine("有客户端连接");

//告诉其他客户端,有客户端登录

foreach(Socket socket in clientList)

{

socket.Send(new UTF8Encoding().GetBytes(newSocket.RemoteEndPoint.ToString() + "已经上线"));

}

//添加至列表

clientList.Add(newSocket);

//创建线程监听客户端发来的消息

Thread thread = new Thread(ReceiveMsg);

thread.IsBackground = true;

thread.Start(newSocket);

}

}

static void ReceiveMsg(Object Obj_)

{

Socket socket = (Socket)Obj_;

while (true)

{

try

{

byte[] bs = new byte[1024];

socket.Receive(bs);

Console.WriteLine(socket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs) + "\n");

}

catch

{

Console.WriteLine("有客户端掉线");

clientList.Remove(socket);

return;

}

}

}

}

Socket客户端:

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

public class SockClient

{

public static Socket socket;

static void Main(string[] args)

{

//创建代表本地的socket

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//创建要连接的ip并尝试连接该ip

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555);

socket.Connect(ip);

Thread thread = new Thread(ReceiveServerMessage);

thread.IsBackground = true;

thread.Start();

while(true)

{

string content = Console.ReadLine();

//发送消息

socket.Send(new UTF8Encoding().GetBytes(content));

}

}

static void ReceiveServerMessage()

{

while(true)

{

//接收来自服务端的消息

byte[] bs = new byte[1024];

socket.Receive(bs);

Console.WriteLine(socket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs) + "\n");

}

}

}

http://www.dtcms.com/a/163985.html

相关文章:

  • 东土科技NewPre系列智能控制器的创新之旅
  • VMware安装 银河麒麟操作系统桌面版 V10 SP1 2403
  • HotSpot的算法细节
  • 集群系统的五大核心挑战与困境解析
  • 4月28号
  • 漏洞复现清单整理-预备梳理,等待补充
  • 多维驱动:负载均衡何以成为现代系统架构的基石
  • 网络爬取需谨慎:警惕迷宫陷阱
  • Ansible安装配置
  • 代发考试战报:4月份 思科认证,华为认证,考试战报分享
  • Twitter 工作原理|架构解析|社交APP逻辑
  • 洛谷题解 | CF1979C Earning on Bets
  • <Revit二次开发> 通过一组模型线构成墙面,并生成墙。Create(Document, IList.Curve., Boolean)
  • 以梦为舟,驶向中医传承新蓝海
  • 宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准
  • Windows 系统下使用 Docker 搭建Redis 集群(6 节点,带密码)
  • (计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解
  • Java项目中使用minio存储服务
  • softlockup_panic=1配置方法及区别
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
  • 常见的 CSS 知识点整理
  • 实验七:基于89C51和DS18B20的温度采集与显示
  • 源码角度分析 sync.map
  • C++智能指针滥用带来的性能与内存问题有哪些
  • 阿里云bgp服务器优势有哪些?搭建bgp服务器怎么做?
  • Mangodb基本概念和介绍,Mango三个重要的概念:数据库,集合,文档
  • Python在自动驾驶仿真环境中的应用:构建智能驾驶的虚拟世界
  • MySQL基础关键_001_认识
  • 判断图片url损坏无法展示工具类
  • WEB漏洞--CSRF及SSRF案例