Unity 简单TCP通信实现

参考教程:【01_C#入门到精通】新手强烈推荐:C#开发课程,一整套课程_哔哩哔哩_bilibiliP178-P187

  我由于毕设需要来学网络通信,属于完全没常识的小白,网上很多现成代码却不懂概念、不会改,现在总结一下踩过的坑,希望后来人少走弯路。

目录

TCP通信理解

服务端代码

客户端代码

如何获取本机ip地址

运行结果:

调试技巧

连接失败可能原因:

参考


TCP通信理解

纯小白建议看课程理解,讲得很通俗。

TCP的通信过程与打电话的过程大致相同,一方负责接听特定号码的电话,而另外一方则需要拨通这个电话号码,与对方建立连接。双方都可以通过听筒(socket输入流)接受对方的信息,通过话筒(socket输出流)向对方发送信息,并且在整个过程中信息的接收和发送是同时进行的。

Socket对应电话,IP地址和端口号对应电话号码。(通过IP地址可以定位到服务端,结合端口号可以定位到服务端里的一个应用程序)

客户端的Socket先连接到服务端负责监听的Socket。服务端检测到连接后创建一个负责通信的Socket,这个Socket通过Receive()和Send()函数和客户端的Socket收发消息。

服务端代码server.cs

(可以对照上面流程图来理解)

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

public class server : MonoBehaviour
{
    private string info = "NULL";                          //状态信息
    private string recMes = "NULL";                        //接收到的信息
    private int recTimes = 0;                              //接收到的信息次数 
    private string inputIp = "10.250.27.220";              //服务端ip地址;可以手动在服务端电脑-cmd- ipconfig 获取IPV4地址
    private string inputPort = "50000";                    //端口值,大于50000比较保险
    private string inputMessage = "NULL";                  //用以发送的信息   

    private Socket socketWatch;                            //用以监听的套接字
    private Socket socketSend;                             //用以和客户端通信的套接字

    private bool isSendData = false;                       //是否点击发送数据按钮
    private bool clickConnectBtn = false;                  //是否点击监听按钮

    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    //点击开始监听后执行
    private void ClickConnect()
    {
        try
        {
            int _port = Convert.ToInt32(inputPort);         //端口号转为int
            clickConnectBtn = true;                         //点击了监听按钮

            //第一步:创建负责监听的Socket
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//参数说明:IPV4对应InterNetwork;Tcp对应Stream

            //用DNS类获得本机的IPV4地址,即IPHost.AddressList[2],是IPAddress格式
            IPHostEntry IPHost = Dns.Resolve(Dns.GetHostName());
            string _ip = Convert.ToString(IPHost.AddressList[2]);
            inputIp = _ip;//方便后面显示本机IP

            Debug.Log(" ip 地址是 :" + _ip);
            Debug.Log(" 端口号是 :" + _port);

            info = "ip地址是 : " + _ip + "端口号是 : " + _port;


            //第二步:为Socket寻址(命名),即绑定IP地址和端口号
            IPEndPoint point = new IPEndPoint(IPHost.AddressList[2], _port);
            socketWatch.Bind(point);                        //绑定

            Debug.Log("监听成功!");
            info = "监听成功";
  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值