C#Socket通信实现

news2024/11/17 16:29:01

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.先运行服务端再运行客户端,就能实现客户端和服务端的通信了(注意顺序不能错,错了客户端连接不了服务器会报错) 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习是什么?

机器学习是一种人工智能(AI)的分支,其主要目标是使计算机系统能够通过数据和经验来改进和学习,而无需明确地编程。在机器学习中,计算机系统会通过对大量数据进行学习和分析,从中发现模式和规律,…

LeetCode每日一题——移除元素

移除元素OJ链接:27. 移除元素 - 力扣(LeetCode) 题目: 思路: 题目给定要求只能使用O(1)的额外空间并且原地修改输入数组,然后返回移除后的数组行长度。那 么我们就可以确我没有办法建立临时的数组存放我…

总要做一回书里的国风少女吧,女儿的新中式套装美出新高度了~

超有质感的新中式国风短袖 采用经典立领设计 活里内衬柔软舒适 搭配浅色系马面裙 如书中温婉气质的千金小姐~

20240304 json可以包含复杂数组(数组里面套数组)

欣赏一下我的思维,它会以漫画,表格,文字。。。各种各样的形式呈现 对于问题1问题2 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON本质上是一种文本…

【MASM汇编语言快速入门】8086MASM汇编深入理解指令对标志位的影响

8086MASM汇编深入理解指令对标志位的影响 文章目录 8086MASM汇编深入理解指令对标志位的影响0. 指令对标志位影响1. 指令对标志位影响速查表2. flags标志寄存器: 标志位含义解读flags1. 状态标志cf, pf, af, zf, sf, of2. 控制标志df, if, tf 详解:1. 传送指令2. 算…

管理类联考–复试–政治--二十大--记忆宫殿

文章目录 整体记忆宫殿门床头柜床书桌阳台 口诀记忆法 整体 记忆宫殿 要有逻辑的放到房间了 何为逻辑,如下大佬总结的便是,或者可自行总结,有前后顺序,做事逻辑即可 第一步:将逻辑的点放到房间里的点,…

旅游管理系统 |基于springboot框架+ Mysql+Java+Tomcat的旅游管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…

LCD屏的应用

一、LCD屏应用 Linux下一切皆文件,我们的LCD屏再系统中也是一个文件,设备文件:/dev/fb0。 如果要在LCD屏显示数据,那我们就可以把数据写入LCD屏的设备文件。 1.显示颜色块 LCD屏分辨:800*480 像素 32位:说明一个像…

一文搞懂PCL中自定义点云类型的构建与函数使用

上周猛男快乐开发时遇到个bug,要用pcl的函数对自定义的点云进行处理。一起解决问题时遇到了很多问题,解决后整理出来分享给各位参考,以免踩一样的坑😊。文章中自定义的点我用PointT来表示,自定义点云一般指的是pcl::Po…

C++:类之六脉神剑——默认成员函数

个人主页:日刷百题 系列专栏:〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 一、默认成员函数 如果一个类中什么成员都没有,简称为 空类 。 空类中真的什么都…

linux最佳入门(笔记)

1、内核的主要功能 2、常用命令 3、通配符:这个在一些启动文件中很常见 4、输入/输出重定向 意思就是将结果输出到别的地方,例如:ls标准会输出文件,默认是输出到屏幕,但是用>dir后,是将结果输出到dir文…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具,这次借助这个任务,记录下使用过程,其他的等有空在整理。 其中,还使用了浏览器的AI小助手,复习了git相关的命令:图片放最后

Python中字符串知识点汇总,以及map()函数的使用

1.字符串的定义 字符串:字符串就是一系列字符。在python中,用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号。 2.使用方法修改字符串的大小写 ①将字符串的字母全部改为大写:upper()函数 实例&…

集合系列(四) -LinkedHashMap详解

一、摘要 在集合系列的第一章,咱们了解到,Map的实现类有HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties等等。 本文主要从数据结构和算法层面,探讨LinkedHashMap的实现。 二、简介 LinkedHashMap可…

欧科云链:ETH Dencun升级倒计时,哪些数据需要重点关注?

2024年3月13日 21:55(epoch 269,568),以太坊将完成坎昆-德内布升级 (Dencun 升级),OKLink 专题数据页传送门 👉 oklink.com/eth/dencun-upgrade 此次升级的主要目标是提升 Layer 2 网络的可扩展…

排序链表的三种写法

题目链接:https://leetcode.cn/problems/sort-list/?envTypestudy-plan-v2&envIdtop-100-liked 第一种,插入排序,会超时 class Solution {public ListNode sortList(ListNode head) {//插入排序,用较为简单的方式解决ListNo…

实现MySQL分页查询的三种方式~

首先我们先来查看一下表中的所有数据: select * from user;如下所示,有5条: 第一种方法: 使用LIMIT和OFFSET关键字 -- 从第1条开始取3条记录(第一页) SELECT * FROM user LIMIT 3 OFFSET 0; 输出如下所…

RTP 控制协议 (RTCP) 反馈用于拥塞控制

摘要 有效的 RTP 拥塞控制算法,需要比标准 RTP 控制协议(RTCP)发送方报告(SR)和接收方报告(RR)数据包提供的关于数据包丢失、定时和显式拥塞通知 (ECN) 标记的更细粒度的反馈。 本文档描述了 RTCP 反馈消息,旨在使用 RTP 对交互式实时流量启用拥塞控制…

Hack The Box-Jab

目录 信息收集 nmap enum4linux 服务信息收集 Pidgin kerbrute hashcat 反弹shell & get user 提权 系统信息收集 端口转发 漏洞利用 get root 信息收集 nmap 端口探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.4 --min-rate 10000 -oA…

Linux中udp服务端,客户端的开发

UDP通信相关函数: ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 函数说明:接收信息 参数说明:sockfd:套接字buf:要接收的缓冲区len:缓冲区…