Image unity-使用tcp套接字将映像从服务器传输到客户端。需要代码更改方面的帮助吗

Image unity-使用tcp套接字将映像从服务器传输到客户端。需要代码更改方面的帮助吗,image,sockets,unity3d,tcp,server,Image,Sockets,Unity3d,Tcp,Server,下面是我正在编写的代码。我从这个链接获得了这个代码:。我修改了这段代码来传输图像文件,只要我在Unity中单击发送按钮。图像按预期从服务器传输到客户端。 我面临的问题如下: 每当我关闭客户端应用程序并重新打开时,连接的客户端数都会增加 不确定如何将图像发送到更多的客户端 关闭并打开服务器应用程序时,连接未建立/图像未传输 还可以帮助我更好地改进代码。多谢各位 服务器代码: 使用UnityEngine; 使用系统集合; 使用System.IO; 使用UnityEngine.UI; 使用制度;

下面是我正在编写的代码。我从这个链接获得了这个代码:。我修改了这段代码来传输图像文件,只要我在Unity中单击发送按钮。图像按预期从服务器传输到客户端。 我面临的问题如下:

  • 每当我关闭客户端应用程序并重新打开时,连接的客户端数都会增加
  • 不确定如何将图像发送到更多的客户端
  • 关闭并打开服务器应用程序时,连接未建立/图像未传输
  • 还可以帮助我更好地改进代码。多谢各位
服务器代码:

使用UnityEngine;
使用系统集合;
使用System.IO;
使用UnityEngine.UI;
使用制度;
使用系统文本;
Net系统;
使用System.Net.Sockets;
使用系统线程;
使用System.Collections.Generic;
公共类ServerScript:MonoBehavior
{
公众形象;
public bool enableLog=false;
公共文本日志文本;
纹理2D电流纹理;
私人TcpListener-listner;
专用const int port=7777;
私有布尔停止=假;
bool isConnected=false;
TcpClient client=null;
NetworkStream=null;
私有列表客户端=新列表();
//这必须与客户端上的SEND_计数相同
常量int发送\接收\计数=15;
私有void Start()
{
Application.runInBackground=true;
currentTexture=新纹理2d(300300);
//连接到服务器
listner=新的TcpListener(IPAddress.Any,port);
Start();
//等待客户端连接到另一个线程
Loom.RunAsync(()=>
{
当(!停止)
{
//等待客户端连接
client=listner.AcceptTcpClient();
//我们是有联系的
客户。添加(客户);
断开连接=正确;
stream=client.GetStream();
}
});
}
//单击按钮时发送图像
公共无效发送按钮(){
//开始发送协同程序
logtext.text=“Notsentimage”;
停止=错误;
start例程(senderCOR());
}
void OnGUI(){
字符串ipaddress=Network.player.ipaddress;
Box(新的Rect(10,Screen.height-50,100,50),ipaddress);
标签(新的Rect(20,Screen.height-3510020),“Status”);
标签(新的Rect(20,Screen.height-20100120),“Connected”+clients.Count);
}
//将数据大小转换为字节数组,并将结果放入fullBytes数组
void byteLength到framebytearray(int byteLength,byte[]fullBytes)
{
//清除旧数据
Array.Clear(fullBytes,0,fullBytes.Length);
//将int转换为字节
byte[]bytesToSendCount=位转换器.GetBytes(ByTeleLength);
//将结果复制到fullBytes
bytesToSendCount.CopyTo(完整字节,0);
}
//将字节数组转换为数据大小并返回结果
int FrameByteArrayToByTeleLength(字节[]FrameByteLength)
{
int bytellength=位转换器.ToInt32(frameBytesLength,0);
通过远程返回;
}
IEnumerator senderCOR()
{
//等待客户端已连接
当(!断开连接)
{
收益返回空;
}
日志(“已连接!”);
bool readyToGetFrame=true;
byte[]frameBytesLength=新字节[发送\接收\计数];
当(!停止)
{
currentTexture=myImage.texture作为Texture2D;
字节[]pngBytes=currentTexture.EncodeToPNG();
//填充要发送的总字节长度。结果存储在frameBytesLength中
bytellength到framebytearray(pngBytes.Length,frameBytesLength);
//将ReadyGetFrame设置为false
readyToGetFrame=false;
Loom.RunAsync(()=>
{
//首先发送总字节数
stream.Write(frameBytesLength,0,frameBytesLength.Length);
日志(“发送的图像字节长度:“+frameBytesLength.Length”);
//发送图像字节
流写入(pngBytes,0,pngBytes.Length);
日志(“发送图像字节数组数据:“+pngBytes.Length”);
//logtext.text=“sentimage”;
//已发送。将readyToGetFrame设置为true
readyToGetFrame=true;
});
//等待,直到我们准备好获取新帧(直到我们发送完数据)
而(!ReadyGetFrame)
{logtext.text=“sentimage”;
日志(“等待获取新帧”);
收益返回空;
}
停止=真;
}
}
无效日志(字符串消息)
{
如果(启用日志)
调试日志(message);
}
私有void更新()
{
}
//停止一切
Application Quit()上的公共无效
{
if(listner!=null)
{
listner.Stop();
}
foreach(客户端中的TCP客户端c)
c、 Close();
}
}
客户端代码:

使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
使用System.Net.Sockets;
Net系统;
使用System.IO;
使用制度;
公共类ClientScript:MonoBehavior
{
公众形象;
//公共输入字段Ipinput;
公共文本输入;
公共文本日志文本;
公共文本信息文本;
public bool enableLog=true;
bool=false;
const int port=7777;
//公共字符串IP=“192.168.0.101”;
TCP客户机;
纹理2d-tex;
私有布尔停止=假;
//这必须与服务器上的SEND_计数相同
常量int发送\接收\计数=15;
//用于初始化
void Start()
{