gpt4 book ai didi

c# - Unity TCP 服务器/客户端

转载 作者:可可西里 更新时间:2023-11-01 02:49:11 24 4
gpt4 key购买 nike

很抱歉,我在这里遇到了一个令人困惑的问题......

我最近在使用 Unity 并尝试制作一个简单的 TCP 服务器,它可以通过它的所有客户端广播,也可以在服务器本身是客户端之一的情况下向他自己广播,比如聊天室或其他东西。

所以我确实成功了,但问题是,客户端接收到的所有数据实际上是客户端发送的初始数据的两倍,下面是我的代码示例

        public void broadcast(string data)
{
print("Broadcast");
byte[] dataByte = Encoding.ASCII.GetBytes(data);
print(ClientList.Count);
for(int x = 0; x<ClientList.Count;x++)
{
ClientList[x].Send(dataByte);
print ("something" +ClientList[x].Send(dataByte));
print ("loop");
}
}

这就是客户端接收它的方式

    private void ReceiveData(IAsyncResult ar)
{
print ("ReceiveData Client");
Socket handler = (Socket)ar.AsyncState;
try
{
int x = handler.EndReceive(ar);
print("Receiving Data...");
print (x);
if (x > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append(Encoding.ASCII.GetString(buffer, 0, x));
string content = sb.ToString();
print("Data Received: " + content);
//string[] data = content.Split(';');
//for (int i = 0; i < data.Length; i++)
//{
this.ProcessData(x, content, handler);
//}
sb.Remove(0, sb.Length);
handler.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveData), handler);
}
else
{
print("Connection Closed...");
}
}
catch (Exception e)
{
print(e.Message);
}
}

我尝试发送测试;这是客户端结果如下

Broadcast
1
something20
ReceiveData Client
loop
Receiving data...
40
Data Received: test;this is client test; this is client"

我不知道这出了什么问题或怎么了,我们将不胜感激。谢谢 b4

最佳答案

问题出在这两行:

ClientList[x].Send(dataByte);
print ("something" +ClientList[x].Send(dataByte));

请注意您是如何执行 ClientList[x].Send(dataByte) 两次的?这就是为什么你在接收端得到它 2 次的原因。只需删除两行中的一行,就可以了。

关于c# - Unity TCP 服务器/客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com