多客户端 连接服务端。
每个客户端10秒发送一次数据 每次大概1000条。发送的数据为字符串客户端代码:
if (client.Connected)
{
Socket socket = client.Client; byte[] SendByte = System.Text.Encoding.Default.GetBytes(strData);
socket.Send(SendByte); try
{
byte[] GetByte = new byte[1024];
int ByteNum = socket.Receive(GetByte); if (GetByte.Length > 1)
{
string str = System.Text.Encoding.Default.GetString(GetByte).Replace("\0", "");
string strs = "已接收" + DataType + ID;
log.WriteLine(str + "&" + strs); if (str == strs)
returnCount = 1;
else
returnCount = 2;
}
else
{
returnCount = 2;
log.WriteLine("无法从远程服务器获取数据!");
}
}
catch (Exception ex)
{
log.WriteLine("连接远程服务器超时,失败原因:" + ex);
returnCount = 2;
}
}服务端代码:
/// <summary>
/// 回调函数,异步读取TCP客户端的请求
/// </summary>
/// <param name="ar"></param>
private void ReadCallBack(IAsyncResult ar)
{
TcpClient client = (TcpClient)ar.AsyncState;
try
{
NetworkStream stream = null; foreach (ClientActive active in list)
{
if (active.IpAddress == client.Client.RemoteEndPoint.ToString())
{
stream = client.GetStream();
}
} if (stream == null)
{
return;
} bool request = false;
int numberOfBytes=0;
if (client.Connected)
numberOfBytes = stream.EndRead(ar);
tcpClientConnected.Set();
string DataType = "";
string ID="";
if (numberOfBytes > 0)
{
try
{
string str = System.Text.Encoding.Default.GetString(buffer).Replace("\0", "");
//处理逻辑
}
catch (Exception ex)
{
mylog.WriteLine("服务解析" + client.Client.RemoteEndPoint.ToString() + "数据时出错,出错原因:" + ex);
}
} if (request)
{
string str = "已接收" + DataType + ID;
byte[] returnByte = System.Text.Encoding.Default.GetBytes(str);
client.Client.Send(returnByte);
}
else
{
byte[] returnByte = System.Text.Encoding.Default.GetBytes("未接收");
client.Client.Send(returnByte);
} client.GetStream().Flush();
this.buffer = new byte[1024];
client.GetStream().BeginRead(buffer, 0, buffer.Length, ReadCallBack, client);
}
catch (Exception ex)
{
mylog.WriteLine("回调函数执行出错,出错原因:" + ex);
}
}客户向服务端发送一条数据,服务端返回接收结果。客户端再发送下条数据
初学TCP,求解!!
每个客户端10秒发送一次数据 每次大概1000条。发送的数据为字符串客户端代码:
if (client.Connected)
{
Socket socket = client.Client; byte[] SendByte = System.Text.Encoding.Default.GetBytes(strData);
socket.Send(SendByte); try
{
byte[] GetByte = new byte[1024];
int ByteNum = socket.Receive(GetByte); if (GetByte.Length > 1)
{
string str = System.Text.Encoding.Default.GetString(GetByte).Replace("\0", "");
string strs = "已接收" + DataType + ID;
log.WriteLine(str + "&" + strs); if (str == strs)
returnCount = 1;
else
returnCount = 2;
}
else
{
returnCount = 2;
log.WriteLine("无法从远程服务器获取数据!");
}
}
catch (Exception ex)
{
log.WriteLine("连接远程服务器超时,失败原因:" + ex);
returnCount = 2;
}
}服务端代码:
/// <summary>
/// 回调函数,异步读取TCP客户端的请求
/// </summary>
/// <param name="ar"></param>
private void ReadCallBack(IAsyncResult ar)
{
TcpClient client = (TcpClient)ar.AsyncState;
try
{
NetworkStream stream = null; foreach (ClientActive active in list)
{
if (active.IpAddress == client.Client.RemoteEndPoint.ToString())
{
stream = client.GetStream();
}
} if (stream == null)
{
return;
} bool request = false;
int numberOfBytes=0;
if (client.Connected)
numberOfBytes = stream.EndRead(ar);
tcpClientConnected.Set();
string DataType = "";
string ID="";
if (numberOfBytes > 0)
{
try
{
string str = System.Text.Encoding.Default.GetString(buffer).Replace("\0", "");
//处理逻辑
}
catch (Exception ex)
{
mylog.WriteLine("服务解析" + client.Client.RemoteEndPoint.ToString() + "数据时出错,出错原因:" + ex);
}
} if (request)
{
string str = "已接收" + DataType + ID;
byte[] returnByte = System.Text.Encoding.Default.GetBytes(str);
client.Client.Send(returnByte);
}
else
{
byte[] returnByte = System.Text.Encoding.Default.GetBytes("未接收");
client.Client.Send(returnByte);
} client.GetStream().Flush();
this.buffer = new byte[1024];
client.GetStream().BeginRead(buffer, 0, buffer.Length, ReadCallBack, client);
}
catch (Exception ex)
{
mylog.WriteLine("回调函数执行出错,出错原因:" + ex);
}
}客户向服务端发送一条数据,服务端返回接收结果。客户端再发送下条数据
初学TCP,求解!!
[ 2011-8-30 17:00:35 ] 连接远程服务器超时,失败原因:System.Net.Sockets.SocketException (0x80004005): 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.Socket.Receive(Byte[] buffer)
在 kjtxNet.Client.ClientSend.SendData(String strData, TcpClient client, String DataType, String ID) 位置
你的服务器端代码:
client.GetStream().Flush();
this.buffer = new byte[1024];
client.GetStream().BeginRead(buffer, 0, buffer.Length, ReadCallBack, client);上面是你再一次开始读取的代码,但是有个问题你这些代码包在了try里面,如果他上面的代码引发异常,
这些就不执行了。服务器就不会再接收数据了。。