Unity中进行网络通信:二:unity客户端和服务端互相发消息
目录
一.目的
1.想知道:Unity中进行网络通信:unity客户端和服务端互相发消息
二.参考
1unity3D中使用Socket进行数据通信(二)
- 总结:待检测
三.操作:一:完成:Unity客户端能给网络调试助手的服务端发送消息
1.下载
1.运行结果
- 网络调试助手作为服务端,但是显示接受的是二进制内容
- unity作为客户端,能够发送消息给服务端
1.注意
- 数据量过大超过自定义的缓存大小,8192字节(如果服务端自己写程序,byte[bufferSize]时候byte是有大小的)。一般发送字符串的话几乎不可能超过8192字节,如果发送图片或者音效的话就会出现数据被截断的现象。
- 以上程序只是一个程序想服务端发送一次数据的过程,不能多次发送,更不能多个客户端想服务器发送数据。
- 采用“分次读取,然后转存”的方式解决数据量过大,使用do/while双层嵌套可以解决多个客户端向服务器发送多个消息的问题
1.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);
}
}