【Unity】Socket网络通信(TCP) - 最基础的客户端通信流程

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

这篇文章主要内容是客户端与服务器通信的内容,服务端代码可以看我的这一篇文章【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程
客户端与服务器的整个流程比较相似,客户端会更加简单一些:

  1. 创建socket
  2. 连接服务器
  3. 收发消息
  4. 释放socket,关闭连接

创建Socket

和服务端创建socket一样,直接new一个Socket对象就可以了,构造函数传入的参数分别是
1.IP地址类型。AddressFamily.InterNetwork是IPv4类地址,AddressFamily.InterNetworkV6是IPv6类地址,这里用的是IPv4地址。
2.socket类型。TCP协议对应的Socket类型是流类型,所以这个参数用的是SocketType.Stream。
3.协议类型。选择TCP协议。
注意:Socket需要引用命名空间using System.Net.Sockets;

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

连接服务器

使用socket提供的Connect方法即可,需要传入一个EndPoint对象。这里需要注意的是,IP地址填的是服务器的IP地址,端口号也是服务端的端口号。(我这里测试因为服务端和客户端是在同一台机器上,所以都是用的127.0.0.1)
注意:IPEndPoint需要引用命名空间using System.Net;

IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
socket.Connect(endpoint);

接收服务端发来的消息

由于我们在写服务端的时候是先发的消息,所以我们客户端先接收一下服务端发来的消息。接收消息的逻辑和服务端一致,使用socket提供的Receive方法接收就行,同样是先定义一个字节数组来接收消息,再解析字节数组就可以了。
这里服务端发过来的是字符串,我们直接将字节数组转化成字符串就行了,Encoding需要引用命名空间using System.Text;

byte[] msg = new byte[1024];
int msgLength = socket.Receive(msg);
Debug.Log("收到服务器发送的消息:" + Encoding.UTF8.GetString(msg, 0, msgLength));

发送消息

发送消息直接用socket提供的Send方法就行,参数需要一个字节数组,由于我们的服务端只写了解析字符串的逻辑,那我们客户端就发个字符串消息过去,字符串需要转成字节数组。

socket.Send(Encoding.UTF8.GetBytes("这里是unity客户端,over!"));

释放Socket,关闭连接

使用socket提供的Shutdown函数关闭发送/接收,然后Close关闭就可以释放连接了。
Shutdown传入的参数可以是以下3种,Both是接收/发送都关闭,Receive是关闭接收,Send是关闭发送。

socket.Shutdown(SocketShutdown.Both);
socket.Close();

调试

首先我们先运行服务端程序,然后再运行我们的unity客户端程序,就能在客户端看到服务端发来的消息了,同样服务端也可以收到我们客户端发送过去的消息。
【Unity】Socket网络通信(TCP) - 最基础的客户端通信流程

完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System.Text;

public class TCPLearn : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //创建socket
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //连接服务器
        IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
        //这里防止连接失败报错,SocketException能提供错误代码
        try
        {
            socket.Connect(endpoint);
        }catch(SocketException e)
        {
            Debug.Log("服务器连接失败:" + e.ErrorCode);//10061是服务器拒绝连接
        }
        
        //收发消息
        //收消息
        byte[] msg = new byte[1024];
        int msgLength = socket.Receive(msg);
        Debug.Log("收到服务器发送的消息:" + Encoding.UTF8.GetString(msg, 0, msgLength));
        //发消息
        socket.Send(Encoding.UTF8.GetBytes("这里是unity客户端,over!"));

        //释放连接
        socket.Shutdown(SocketShutdown.Both);
        socket.Close();
    }
}

以上就是这篇文章的所有内容了,此为个人学习记录,如有哪个地方写的有误,劳烦大佬指出,感谢,希望对各位看官有所帮助!文章来源地址https://www.toymoban.com/news/detail-438204.html

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

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

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

相关文章

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

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

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

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

    2024年02月05日
    浏览(41)
  • 【Unity】Socket网络通信(TCP) - 实现简单的多人聊天功能

    多客户端连接服务器其原理是在服务端保存客户端连入后与客户端通信的socket,由于等待客户端连接会阻塞主线程,所以结合多线程就能实现多客户端连入功能。多人聊天只需要将A客户端发来的消息,转发给除A客户端外的其他客户端,即可实现。如果你还不怎么熟悉服务端

    2024年02月03日
    浏览(45)
  • C++网络编程 TCP套接字基础知识,利用TCP套接字实现客户端-服务端通信

    流式套接字编程针对TCP协议通信,即是面向对象的通信,分为服务端和客户端两部分。 1)加载套接字库( 使用函数WSAStartup() ),创建套接字( 使用socket() ) 2)绑定套接字到一个IP地址和一个端口上( 使用函数bind() ) 3)将套接字设置为监听模式等待连接请求( 使用函数

    2024年02月03日
    浏览(34)
  • Linux网络编程:Socket服务器和客户端实现双方通信

    目录 一,什么是网络编程 二,为什么使用端口号 三,TCP协议与UDP协议 ①TCP(传输控制协议) ②UDP(用户数据报协议,User Data Protocol) ③总结归纳 四,Socket服务器和客户端的开发流程 五,服务器和客户端相关API说明 ①socket()函数 ②bind()函数 ③listen()函数 ④accept()函数 ⑤客户端

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

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

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

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

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

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

    2024年02月13日
    浏览(29)
  • 【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

    ​ 哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信 ,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 本期收录于博主的专栏 : JavaEE_保

    2024年02月02日
    浏览(40)
  • C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)

    创作不易 觉得有帮助请点赞关注收藏 TCP/IP是当下网络协议栈中的主流协议 TCP属于传输层的协议  可靠传输 包括经典的三次握手等等 IP协议是网络层协议 尽全力传输但不可靠 学过计算机网络的同学们对这个应该比较熟悉 以下是使用C++进行网络通信的实例  服务端 主要使用

    2024年02月14日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包