【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程

这篇具有很好参考价值的文章主要介绍了【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我这里新建了一个C#控制台项目来写服务端代码。
下面是基于C# Socket的最基础服务端通信流程:

  1. 创建服务端Socket对象
  2. 绑定IP地址和端口
  3. 设置最大监听客户端数量
  4. 等待客户端连接
  5. 收发消息
  6. 释放连接

基于上面流程就能实现一个最简单并且能和客户端通信的服务器程序,每个步骤Socket都提供了相对应的方法,使用Socket提供的方法就行。

创建服务端Socket对象

使用socket需要引用命名空间 using System.Net.Sockets;

//创建服务端socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

直接new一个Socket就可以,参数分别是:
1.IP地址类型。AddressFamily.InterNetwork是IPv4类地址,AddressFamily.InterNetworkV6是IPv6类地址,这里用的是IPv4地址。
2.socket类型。TCP协议对应的Socket类型是流类型,所以这个参数用的是SocketType.Stream。
3.协议类型。选择TCP协议。

绑定IP地址和端口

使用socket提供的Bind方法绑定IP地址和端口
【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程
这里需要传入一个EndPoint类型的参数,我们先定义一个IPEndPoint对象(IPEndPoint是继承了EndPoint对象的,可以作为Bind方法的参数),需要引用命名空间using System.Net;
直接new一个IPEndPoint对象,传入IP地址和端口号,IPAddress.Parse(“127.0.0.1”)可以将IP地址字符串转化成IPAddress,使用起来比较方便,端口号自定义需大于1024且没被使用过的端口号。
将iPEndPoint传入Bind方法中即可绑定IP地址和端口号。
127.0.0.1 (保留地址,用于测试)这个IP地址是代表本机的IP地址,由于便于测试,服务端和客户端的程序都在同一台计算机上,所以可以用这个地址。也可以填入你计算机的IP地址,具体本机IP地址怎么查询可以百度一下。

//绑定IP地址和端口
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
serverSocket.Bind(iPEndPoint);

设置最大监听客户端数量

使用socket提供的Listen方法,设置最大监听客户端数量,参数传入一个Int值。
这里我设置了最多监听1024个客户端。

//设置最大监听客户端数量
serverSocket.Listen(1024);

等待客户端连接

使用socket提供的Accept方法,等待客户端连入,这个方法是一个阻塞方法,会阻塞线程,当有客户端连入后才会继续执行该方法下面的逻辑,客户端连入成功后,返回一个与客户端通信的socket,返回的socket后面用于与客户端相互通信。

//等待客户端链接
Socket clientSocket = serverSocket.Accept();

收发消息

使用Send方法发送消息,Receive方法接收消息。
发送消息:
Send需要传入字节数组,这里我们给客户端发送一条string类型的消息,用Encoding.UTF8.GetBytes(需要引用命名空间using System.Text;)将字符串转化成字节数组并传入Send方法中,即可发送消息。
接收消息:
需要定义一个字节数组来存放收到的消息,容量可以定义得稍微大一些。将字节数组传入Receive方法中,当收到消息后,客户端发来的消息会存入这个字节数组,并返回消息的长度,所以Receive会返回一个int值,该值就是消息长度,用于解析消息。
解析消息:
使用Encoding.UTF8.GetString(msgBytes, 0, msgLength)解析字符串消息。这里第一个参数是传入收到消息的字节数组,第二个参数是解析的起始位置,第三个参数是解析消息的长度。

 //给客户端发送消息
clientSocket.Send(Encoding.UTF8.GetBytes("欢迎连入服务端..."));
//接受客户端发来的消息
byte[] msgBytes = new byte[1024];
int msgLength = clientSocket.Receive(msgBytes);
//解析客户端发来的消息
Console.WriteLine("客户端{0}:{1}", clientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(msgBytes, 0, msgLength));

释放连接

使用socket提供的Shutdown函数关闭发送/接收,然后Close关闭就可以释放连接了。
Shutdown传入的参数可以是以下3种,Both是接收/发送都关闭,Receive是关闭接收,Send是关闭发送。
【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程

//通信完成释放连接
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();

以上最简单的服务端代码就完成了,完整代码如下:

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

namespace TCPServer
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建服务端socket
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定IP地址和端口
            IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
            serverSocket.Bind(iPEndPoint);
            Console.WriteLine("IP地址和端口号绑定成功...");
            //设置监听客户端数量
            serverSocket.Listen(1024);
            //等待客户端链接
            Console.WriteLine("等待客户端连接...");
            //阻塞主线程,有客户端连入才会往下执行,否则一直在等待
            Socket clientSocket = serverSocket.Accept();
            //给客户端发送消息
            clientSocket.Send(Encoding.UTF8.GetBytes("欢迎连入服务端..."));
            //接受客户端发来的消息
            byte[] msgBytes = new byte[1024];
            int msgLength = clientSocket.Receive(msgBytes);
            //解析客户端发来的消息
            Console.WriteLine("客户端{0}:{1}", clientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(msgBytes, 0, msgLength));
            //通信完成释放连接
            clientSocket.Shutdown(SocketShutdown.Both);
            clientSocket.Close();

            Console.WriteLine("按任意键退出...");
            Console.ReadKey();
        }
    }
}

收发消息效果需要配合客户端代码才能看出,可以看我的这篇文章《【Unity】Socket网络通信(TCP) - 最基础的客户端通信流程》了解最基础的客户端与服务端通信代码。
以上就是这篇文章的所有内容了,此为个人学习记录,如有哪个地方写的有误,劳烦大佬指出,感谢,希望对各位看官有所帮助!文章来源地址https://www.toymoban.com/news/detail-414929.html

到了这里,关于【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】网络编程与Socket套接字、UDP编程和TCP编程实现客户端和服务端通信

    为什么需要网络编程? 现在网络普及程序越来越高,网络上保存着我们日常生活中需要的各种资源,使用程序通过网络来获取这些资源的过程就需要网络编程来实现。 什么是网络编程? 网络编程,指网络上的主机,通过不同的进程以程序的方式实现网络通信(网络数据传输)

    2024年02月17日
    浏览(73)
  • 网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

    本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下! 今天分享的内容是TCP流套接字实现的客户端与服务器的通信,一定要理解 DatagramSocket,DatagramPacket 这两个类的作用以及方法

    2024年02月12日
    浏览(61)
  • Java【网络编程2】使用 TCP 的 Socket API 实现客户端服务器通信(保姆级教学, 附代码)

    📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通过博客输出所学知识 📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 📙 希望我的专栏能够帮助到你: JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统

    2024年02月05日
    浏览(62)
  • 网络通信(Socket/TCP/UDP)

    Socket(又叫套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接协议,客户端的IP地址,客户端的端口,服务器的IP地址,服务器的端口。 一个Socket是一对IP地址和端口。 Socket可以看

    2024年01月22日
    浏览(54)
  • 【网络】socket——TCP网络通信 | 日志功能 | 守护进程

    🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言: 你只管努力,剩下的交给时间! 上篇文章中本喵介绍了UDP网络通信的socket代码,今天介绍TCP网络通信的socket代码。 和 udp 的网络通信一样, tcp 通信也需要服务器指定端口号,IP地址同样使用 0.0.0.0 ,以便客户端所有对服

    2024年02月16日
    浏览(45)
  • 【网络通信】socket编程——TCP套接字

    TCP依旧使用代码来熟悉对应的套接字,很多接口都是在udp中使用过的 所以就不会单独把他们拿出来作为标题了,只会把第一次出现的接口作为标题 通过TCP的套接字 ,来把数据交付给对方的应用层,完成双方进程的通信 在 tcpServer.hpp 中,创建一个命名空间 yzq 用于封装 在命名

    2024年02月13日
    浏览(46)
  • 使用 python socket 实现UDP/TCP网络通信

    目录 目录 1.socket简介 2.创建socket 2.1创建UDPSocket 2.2创建TCPSocket 3.使用UDPSocket发送数据并接收 4.使用UDPSocket发送广播 5.UDPSocket聊天器 (多线程实现消息的收发功能) 6.使用TCPSocket建立客户端 7.使用TCPSocket建立服务端        socket(简称:套接字),是支持TCP和UDP(网络传输方式

    2023年04月10日
    浏览(62)
  • tcp/udp socket 网络通信中超时时间的设置

    1.connect函数的超时时间设置只对TCP有效 UDP由于是无连接的connect都会返回success 有两种方法: 第一种方法 默认的socket是阻塞模式 我们只需要设置其为非阻塞模式,然后调用select去查询其状态 代码如下:  第二种是 默认其为阻塞模式  通过setsockopt 函数设置TCP_SYNCNT 值 头文件

    2024年02月15日
    浏览(39)
  • 「网络编程」第二讲:网络编程socket套接字(三)_ 简单TCP网络通信程序的实现

    「前言」文章是关于网络编程的socket套接字方面的,上一篇是网络编程socket套接字(二),下面开始讲解!  「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 I do not know where to go,but I have been on the road. 我不知

    2024年02月11日
    浏览(50)
  • socket套接字通信 TCP传输控制协议/IP网络协议 5.18

    B/S :浏览器和服务器 C/S :客户机和服务器 网络的层次结构和每层所使用协议的集合 网络采用分层管理的方法,将网络的功能划分为不同的模块 OSI模型: 共7种: 数据的封装与传递过程: 网络传输数据大小user data: 6~1460 网络传输中容易发生拆包和粘包,所以接收和发送的字节

    2024年02月05日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包