现有2个问题,socket.send()以后是不是没有立即发送,怎么样让每个包立即发送而不是写到缓冲,还有就是有时候信息会接到多次接收代码是
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateInfo state = (StateInfo)ar.AsyncState;
//读取数据
int dataSize = state.socket.EndReceive(ar);
if (dataSize > 0)
{
state.sb.Remove(0, state.sb.Length);
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, dataSize));
DBManager.ErrorLogInsert("test", "listen", state.sb.ToString());
if (state.socket.Available > 0)
{
state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
}
else
{ //显示接收数据
string content = state.sb.ToString();
string[] msgArr = content.Split(new char[] { ';' });
if (msgArr.Length != 3)
{
return;
}
SendUserMsg sendMSG = new SendUserMsg();
sendMSG.UserMobile = msgArr[0];
sendMSG.UserMsg = msgArr[1];
sendMSG.UserUrl = msgArr[2];
if (msgList.LastIndexOf(sendMSG) == -1)
{
msgList.Add(sendMSG);
}
//接收完毕
}
}
state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}求教
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateInfo state = (StateInfo)ar.AsyncState;
//读取数据
int dataSize = state.socket.EndReceive(ar);
if (dataSize > 0)
{
state.sb.Remove(0, state.sb.Length);
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, dataSize));
DBManager.ErrorLogInsert("test", "listen", state.sb.ToString());
if (state.socket.Available > 0)
{
state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
}
else
{ //显示接收数据
string content = state.sb.ToString();
string[] msgArr = content.Split(new char[] { ';' });
if (msgArr.Length != 3)
{
return;
}
SendUserMsg sendMSG = new SendUserMsg();
sendMSG.UserMobile = msgArr[0];
sendMSG.UserMsg = msgArr[1];
sendMSG.UserUrl = msgArr[2];
if (msgList.LastIndexOf(sendMSG) == -1)
{
msgList.Add(sendMSG);
}
//接收完毕
}
}
state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}求教
多次接收到可能是你多次发了命令,对方回了多次信息,
TCP里面肯定不会有重复的信息,除非是你重复发送