对不起,我在这里遇到一个令人困惑的问题......
我最近使用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);
}
}
我尝试发送test;this is client
结果在
Broadcast
1
something20
ReceiveData Client
loop
Receiving data...
40
Data Received: test;this is client test; this is client"
我不知道这出错了什么或如何,任何帮助将不胜感激。谢谢b4
答案 0 :(得分:2)
问题在于以下两个方面:
ClientList[x].Send(dataByte);
print ("something" +ClientList[x].Send(dataByte));
注意你是如何执行ClientList[x].Send(dataByte)
两次的?这就是你在接收端获得2次的原因。只需删除两条线中的一条就可以了。