unity 在局域网中客户端连接上服务端后,服务端发送给客户端多张图片
时间: 2023-11-10 13:06:22 浏览: 76
对于这个问题,你可以通过以下步骤实现:
1. 在服务端,将需要发送的图片转换为字节数组,并将字节数组打包成数据包发送给客户端。
2. 在客户端,接收到服务端发送的数据包后,解析出图片的字节数组。
3. 将字节数组转换为图片,并在客户端显示出来。
具体实现可以参考以下代码:
服务端:
```csharp
using System.IO;
using System.Net.Sockets;
using UnityEngine;
public class Server : MonoBehaviour
{
private TcpListener listener;
private TcpClient client;
private void Start()
{
listener = new TcpListener(System.Net.IPAddress.Any, 8888);
listener.Start();
Debug.Log("Server started");
client = listener.AcceptTcpClient();
Debug.Log("Client connected");
// 计算图片字节数组
byte[] imageBytes1 = File.ReadAllBytes("image1.png");
byte[] imageBytes2 = File.ReadAllBytes("image2.png");
// 发送第一张图片
SendImage(imageBytes1);
// 发送第二张图片
SendImage(imageBytes2);
}
private void SendImage(byte[] imageBytes)
{
// 打包数据包
byte[] package = new byte[4 + imageBytes.Length];
System.Buffer.BlockCopy(BitConverter.GetBytes(imageBytes.Length), 0, package, 0, 4);
System.Buffer.BlockCopy(imageBytes, 0, package, 4, imageBytes.Length);
// 发送数据包
NetworkStream stream = client.GetStream();
stream.Write(package, 0, package.Length);
stream.Flush();
Debug.Log("Image sent");
}
}
```
客户端:
```csharp
using System.IO;
using System.Net.Sockets;
using UnityEngine;
using UnityEngine.UI;
public class Client : MonoBehaviour
{
public RawImage image1;
public RawImage image2;
private TcpClient client;
private void Start()
{
client = new TcpClient("localhost", 8888);
Debug.Log("Client connected");
// 接收第一张图片
byte[] imageBytes1 = ReceiveImage();
Texture2D texture1 = new Texture2D(2, 2);
texture1.LoadImage(imageBytes1);
image1.texture = texture1;
// 接收第二张图片
byte[] imageBytes2 = ReceiveImage();
Texture2D texture2 = new Texture2D(2, 2);
texture2.LoadImage(imageBytes2);
image2.texture = texture2;
}
private byte[] ReceiveImage()
{
// 接收数据包
NetworkStream stream = client.GetStream();
byte[] lengthBytes = new byte[4];
stream.Read(lengthBytes, 0, 4);
int length = BitConverter.ToInt32(lengthBytes, 0);
byte[] imageBytes = new byte[length];
stream.Read(imageBytes, 0, length);
Debug.Log("Image received");
return imageBytes;
}
}
```
上述代码中,服务端会将两张图片发送给客户端,客户端接收到图片后会在界面上显示出来。注意,上述代码中的图片路径需要根据实际情况进行修改。
阅读全文