当前位置: 首页 > 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.xdnf.cn/news/215569.html

相关文章:

  • 学习笔记:Qlib 量化投资平台框架 — MAIN COMPONENTS Part Ⅱ
  • Spring Boot 缓存机制:从原理到实践
  • HTML 表单
  • vue3+Nest.js项目 部署阿里云
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)
  • 三轴云台之镜头解码技术篇
  • 如何提升自我价值?
  • 企业为什么选择浙江电信服务器租用?
  • 服务器和数据库哪一个更重要
  • DPO 与 KTO 的区别
  • 【XR空间传送】深入理解Unity中 XR Interaction Toolkit 的 MatchOrientation 用法与使用场景(空间传送、视角切换)
  • Leetcode 3528. Unit Conversion I
  • AI艺术创作:Midjourney、Stable Diffusion与商业变现
  • 异步机制与 CPU 的关系解析
  • Sql刷题日志(day7)
  • Html1
  • 无人设备遥控器之移动手持定位系统篇
  • Chrome的插件扩展程序安装目录是什么?在哪个文件夹?
  • 40 python http介绍
  • LeetCode 2962.统计最大元素出现至少 K 次的子数组:滑动窗口
  • Leetcode 3534. Path Existence Queries in a Graph II
  • yum 安装 ncurses-devel 报错 baseurl 的解决方法
  • SpringCloud学习笔记
  • 焊接与热切割作业精选判断真题及答案
  • 模拟集成电路设计与仿真 : Feedback System
  • 甲骨文云2025深度解析:AI驱动的云原生生态与全球化突围
  • 端到端电力电子建模、仿真与控制及AI推理
  • AimRT 从零到一:官方示例精讲 —— 三、Executor示例.md
  • 爬虫学习笔记(四)---request入门
  • Keras模型保存、加载介绍