Unity中进行网络通信:二:unity客户端和服务端互相发消息

Unity中进行网络通信:二:unity客户端和服务端互相发消息

目录


一.目的

1.想知道:Unity中进行网络通信:unity客户端和服务端互相发消息

二.参考

1unity3D中使用Socket进行数据通信(二)

  1. 总结:待检测

三.操作:一:完成:Unity客户端能给网络调试助手的服务端发送消息

1.下载

1.运行结果

  1. 网络调试助手作为服务端,但是显示接受的是二进制内容
  2. unity作为客户端,能够发送消息给服务端
www.zeeklog.com  - Unity中进行网络通信:二:unity客户端和服务端互相发消息

1.注意

  1. 数据量过大超过自定义的缓存大小,8192字节(如果服务端自己写程序,byte[bufferSize]时候byte是有大小的)。一般发送字符串的话几乎不可能超过8192字节,如果发送图片或者音效的话就会出现数据被截断的现象。
  2. 以上程序只是一个程序想服务端发送一次数据的过程,不能多次发送,更不能多个客户端想服务器发送数据。
  3. 采用“分次读取,然后转存”的方式解决数据量过大,使用do/while双层嵌套可以解决多个客户端向服务器发送多个消息的问题

1.Unity设置

www.zeeklog.com  - Unity中进行网络通信:二:unity客户端和服务端互相发消息

1.代码:MyNetTest02_client.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

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

public class MyNetTest02_client : MonoBehaviour
{
    /// <summary>string:ip地址</summary>
    private string str_ip = "192.168.43.167";

    /// <summary>string:ip的端口号</summary>
    private string str_port = "8080";

    TcpClient client;

    // Start is called before the first frame update
    void Start()
    {
        Client();
    }

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

    private void Client()
    {
        client = new TcpClient();

        try
        {
            //client.Connect(IPAddress.Parse("192.168.0.13"), 10001);//同步方法,连接成功、抛出异常、服务器不存在等之前程序会被阻塞
            client.Connect(IPAddress.Parse(str_ip), int.Parse(str_port));//同步方法,连接成功、抛出异常、服务器不存在等之前程序会被阻塞
        }
        catch (Exception ex)
        {
            Debug.Log("客户端连接异常:" + ex.Message);
        }

        Debug.Log("LocalEndPoint = " + client.Client.LocalEndPoint + ". RemoteEndPoint = " + client.Client.RemoteEndPoint);


        //客户端发送数据部分
        string msg = "hello server";
        NetworkStream streamToServer = client.GetStream();//获得客户端的流
        byte[] buffer = Encoding.Unicode.GetBytes(msg);//将字符串转化为二进制
        streamToServer.Write(buffer, 0, buffer.Length);//将转换好的二进制数据写入流中并发送
        Debug.Log("发出消息:" + msg);
    }

}