C#Socket通信实现

1.编写服务端代码,以原石兑换码为例(分别建立两个控制台应用,一个用于服务端,一个用于客户端)

using System.Net.Sockets;
using System.Net;
using System.Text;

namespace 网络游戏服务器
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化
            IPAddress myIp = IPAddress.Parse("127.0.0.1");//指定IP
            IPEndPoint myPoint = new IPEndPoint(myIp, 8000);//指定IP和端口
            mysocket.Bind(myPoint);//开机
            mysocket.Listen(8);//监听
            //模拟兑换码
            string x = "114514";
            while (true)
            {
                Console.WriteLine("Start Accept");
                Socket clientSocket = mysocket.Accept();//应答
                while (true)
                {
                    byte[] myBuff = new byte[1024];
                    int recNum = clientSocket.Receive(myBuff);
                    string recStr = Encoding.UTF8.GetString(myBuff, 0, recNum);//转换接受的格式
                    Console.WriteLine("收到来自客户端的消息" + recStr);//把接收到的消息打印出来
                    if (recStr == x)
                    {
                        Console.WriteLine("收到兑换码请求");
                        string reply = "恭喜你兑换成功,获得原石8848颗";
                        byte[] data = Encoding.UTF8.GetBytes(reply); //编码回复消息
                                                                     // 发送回复消息给客户端
                        clientSocket.Send(data);
                    }
                    else
                    {
                        string reply2 = "无效的兑换码,请检查输入";
                        byte[] data = Encoding.UTF8.GetBytes(reply2); //编码回复消息
                                                                      // 发送回复消息给客户端
                        clientSocket.Send(data);
                    }
                    if (recStr == "exit")
                    {
                        break; // 如果接收到 "exit",跳出内层循环,断开连接并等待下一个连接
                    }
                }

            }
        }

    }
}

2.编写客户端代码

using System.Net.Sockets;
using System.Net;
using System.Text;

namespace 网络游戏客户端
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化
            IPAddress myIp = IPAddress.Parse("127.0.0.1");//指定ip
            IPEndPoint myPoint = new IPEndPoint(myIp, 8000);//指定ip和端口
            mysocket.Connect(myPoint); // 建立与目标主机的连接
            while (true)
            {
                Console.WriteLine("请输入原石兑换码");
                string sendstr = Console.ReadLine();
                byte[] sendBts = Encoding.UTF8.GetBytes(sendstr);//设置发送的格式
                mysocket.Send(sendBts); // 发送数据
                byte[] receiveBuffer = new byte[1024]; // 缓冲区大小可以根据需要调整
                int receiveLength = mysocket.Receive(receiveBuffer); // 接收数据
                string receivedData = Encoding.UTF8.GetString(receiveBuffer, 0, receiveLength); // 将接收到的字节数据转换为字符串
                Console.WriteLine("来自服务器的数据: " + receivedData); // 打印接收到的数据
                if (sendstr == "exit")
                {
                    break; // 输入exit时退出循环
                }
            }
        }
    }
}

3.先运行服务端再运行客户端,就能实现客户端和服务端的通信了(注意顺序不能错,错了客户端连接不了服务器会报错) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/461211.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Eviews实战】——重庆市居民消费城乡差异研究

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

Python内存管理与垃圾回收机制:深入理解与优化【第138篇—RESTful API】

Python内存管理与垃圾回收机制:深入理解与优化 在Python编程中,内存管理与垃圾回收机制是至关重要的主题。了解Python如何管理内存和处理垃圾回收对于编写高效、稳定的程序至关重要。本文将深入探讨Python中的内存管理和垃圾回收机制,包括内…

【ARM】UBL本地服务器离线激活license

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 UBL本地服务器离线激活license。 2、 问题场景 解决有用户外出时激活 license。 3、软硬件环境 1)、软件版本:MDK5.39 2)、电脑环境:Ubuntu 20.04 LTS 3&…

【Eviews实战】——时序的平稳性检验

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

Microsoft OneDrive的10个常见问题及其解决方法,总有一种适合你

前言 Microsoft OneDrive是一个有用的工具,用于在线和跨多个设备备份和同步文件。然而,问题和冲突确实会发生。可能OneDrive突然停止工作,文件无法同步,项目被意外删除,或者同一文件的两个版本出现。然而,在你转到其他云存储服务之前,下面是如何解决这些(和其他)常见…

基于openresty构建运维工具链实践

本文字数:4591字 预计阅读时间:25 01 导读 如今OpenResty已广泛被各个互联网公司在实际生产环境中应用,在保留Nginx高并发、高稳定等特性基础上,通过嵌入Lua来提升在负载均衡层的开发效率并保证其高性能。本文主要介绍接口鉴权、流…

3款文章生成器,为创作者高效率自动写文章

在当今信息爆炸的时代,写作已经成为许多人不可或缺的技能。无论是从事新闻行业、营销领域,还是个人博客的作者,都需要不断地输出高质量的文字内容来吸引读者。然而,对于许多创作者来说,写作是一个耗时耗力的过程&#…

Python环境安装与配置(Windows环境)

Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下,超简单 一、下载Python 打开官网 Download Python | Python.org 下载中心,根据自己的系统和版本选择合适的安装包&#xf…

一款强大的去重工具,让文章快速过原创

今天要给大家分享的内容是一款强大的去重工具,可以帮助我们在创作的过程中让文章快速过原创检测!我们都知道,在当今信息爆炸的时代,网络上充斥着大量的内容,原创性已经成为内容创作者们追求的重要目标之一。然而&#…

Postman-Installation has failed

如图: 解决方法: 打开文件夹 Postman-win64-Setup 点击Postman.exe 即可

【C++ 设计模式】策略模式与简单工厂模式的结合

文章目录 前言一、为什么需要策略模式简单工厂模式二、策略模式简单工厂模式实现原理三、UML图四、示例代码总结 前言 在软件设计中,常常会遇到需要根据不同情况选择不同算法或行为的情况。策略模式和简单工厂模式是两种常见的设计模式,它们分别解决了对…

SQLiteC/C++接口详细介绍之sqlite3类(三)

快速跳转文章列表:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(二) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(四) 6.sqlite3_create_module与sqlite3_create_module_v2函数…

Java爬虫-获取数据的方式之一

目录 一、jsoup的使用 1.概述 2.主要功能 3.快速入门 4.数据准备 二、Selenium 1.概述 2.使用 三、Selenium配合jsoup获取数据 四、爬虫准则 五、Seleniumjsoupmybatis实现数据保存 1.筛选需要的数据 2.创建一个表,准备存储数据 手写?不存在…

【JavaEE初阶系列】——多线程 之 创建线程

目录 🎈认识Thread类 🎈Sleep 🎈创建线程 🚩继承Thread,重写run方法 🚩实现Runnable接口,重写run方法 🚩使用匿名内部类创建 Thread 子类对象 🚩使用匿名内部类&…

C++ vector详解及模拟实现

目录 1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 2.vector深度剖析及模拟实现 3.迭代器失效 4.遗留的浅拷贝问题 5.完整代码 1.vector的介绍及使用 1.1 vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也采用的连续…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:ScrollBar)

滚动条组件ScrollBar,用于配合可滚动组件使用,如List、Grid、Scroll。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 接口 ScrollBar(val…

MAC M芯片 Anaconda安装

Anaconda安装 1.M芯片下载AnaConda 1.M芯片下载AnaConda https://www.anaconda.com/download 安装完成 conda的版本是24.1.2

strcmp的模拟实现

一:strcmp函数的定义: strcmp函数功能的解释: 比较两个字符串的大小(按照字符串中字符的ascll码值)。 标准规定: 第一个字符串大于第二个字符串,则返回大于 0 的数字 第一个字符串等于第二个…

【Linux C | 多线程编程】线程的基础知识

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Vue 3 + TypeScript 项目中全局挂载并使用工具函数

一、proxy方式 1.封装日期选择工具函数: 在untils文件夹下新建index.ts,并导出工具函数 /*** 获取不同类型日期* param:类型 dateVal: 是否指定*/ export function getSystemDate(param: any, dateVal: any) {let systemDate dateVal ? new Date(da…