tcp unity 图片_关于TCP传输图片的问题

在实现TCP服务器传输图片时,发现在PC端能正常传输,但移动端只收到部分数据。问题可能出在数据打包、接收或网络差异上。客户端通过`GetImageByte`方法读取图片字节流并添加前缀,然后通过`SendMessage`发送。服务器端使用异步`ReceiveMessageAsync`接收数据,并解析图片。检查移动端的网络环境及数据接收逻辑以解决问题。
摘要由CSDN通过智能技术生成

最近在用TCP写一个能够传输图片的服务器,但是却出现了这样一个问题,用电脑的时候图片可以完整的传输过去,服务器显示的数据没有问题,但是用移动端传输图片却发现服务器只能收到不到十分之一的数据,但是我感觉我写的逻辑没有问题,在pc端上也是一切正常的

这是我在PC端发送一个32k大小的图片服务器接收到的数据量

这是我打包到移动端发送同一张图片接收到的数据量

///

/// 根据图片的路径返回图片的字节流 这是客户端发送图片的代码

///

///

///

public static byte[] GetImageByte(string imagePath)

{

FileStream files = new FileStream(imagePath, FileMode.Open);

byte[] imgByte = new byte[files.Length];

BinaryReader str = new BinaryReader(files);

files.Read(imgByte, 0, imgByte.Length);

files.Close();

//前缀

byte[] qzdataByte = Encoding.UTF8.GetBytes("01");

//前缀+图片数据

byte[] qzAndTexturedataByte = qzdataByte.Concat(imgByte).ToArray();

//

Unity中使用TCP协议传输数据可以通过使用C#中的Socket类来实现。下面是一个简单的示例代码,展示了如何在Unity中使用TCP协议传输数据: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; using UnityEngine; public class TCPClient : MonoBehaviour { private TcpClient client; private NetworkStream stream; private byte[] receiveBuffer; private void Start() { ConnectToServer("127.0.0.1", 8888); // 连接到服务器的IP和端口 } private void ConnectToServer(string serverIP, int serverPort) { try { client = new TcpClient(); client.Connect(serverIP, serverPort); stream = client.GetStream(); receiveBuffer = new byte[1024]; // 启动异步接收数据 stream.BeginRead(receiveBuffer, 0, receiveBuffer.Length, OnReceiveData, null); } catch (Exception e) { Debug.Log("连接服务器失败:" + e.Message); } } private void OnReceiveData(IAsyncResult ar) { try { int bytesRead = stream.EndRead(ar); if (bytesRead <= 0) { Debug.Log("与服务器断开连接"); return; } string receivedMessage = Encoding.ASCII.GetString(receiveBuffer, 0, bytesRead); Debug.Log("收到服务器消息:" + receivedMessage); // 继续异步接收数据 stream.BeginRead(receiveBuffer, 0, receiveBuffer.Length, OnReceiveData, null); } catch (Exception e) { Debug.Log("接收数据时发生错误:" + e.Message); } } private void SendMessageToServer(string message) { try { byte[] data = Encoding.ASCII.GetBytes(message); stream.Write(data, 0, data.Length); Debug.Log("发送消息到服务器:" + message); } catch (Exception e) { Debug.Log("发送消息时发生错误:" + e.Message); } } private void OnDestroy() { if (stream != null) stream.Close(); if (client != null) client.Close(); } // 示例使用的按钮点击事件 public void SendButtonOnClick() { SendMessageToServer("Hello, Server!"); } } ``` 以上示例代码是一个简单的TCP客户端,它通过Socket连接到指定的服务器IP和端口,然后可以发送和接收数据。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值