110,587
社区成员
发帖
与我相关
我的任务
分享
public byte[] getObjectBytes(object o)
{
try
{
#region//old Code
BinaryFormatter bf = new BinaryFormatter();
bf.TypeFormat = System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesWhenNeeded;
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, o);
ms.Position = 0;
return ms.GetBuffer();
#endregion
#region// new code
//MemoryStream ms = new MemoryStream();
//IFormatter formatter = new BinaryFormatter();
//formatter.Serialize(ms, o);
//byte[] bs = ms.GetBuffer();
//ms.Seek(0, SeekOrigin.Begin);
// return bs;
#endregion
}
catch { return null; }
}
public DataSet getDataSet(byte[] getobjectBytes)
{
try
{
#region//old code
BinaryFormatter bf = new BinaryFormatter();
bf.TypeFormat = System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesWhenNeeded;
MemoryStream ms = new MemoryStream(getobjectBytes);
DataSet ds = (DataSet)bf.Deserialize(ms);
#endregion
#region//new code
//IFormatter formatter2 = new BinaryFormatter();
//MemoryStream ms2 = new MemoryStream();
//ms2.Write(getobjectBytes, 0, getobjectBytes.Length);
//ms2.Seek(0, SeekOrigin.Begin);
//DataSet ds = (DataSet )formatter2.Deserialize(ms2);
#endregion
return ds;
}
catch { return null; }
}
#region//自动识别长度发送数据
public static int SendData(Socket socket, byte[] buffer, int outTime,string ForSendDataOnly)
{
if (socket == null || socket.Connected == false)
{
Log.WriteLog("参数socket 为null,或者未连接到远程计算机");
// throw new ArgumentException("参数socket 为null,或者未连接到远程计算机");
}
if (buffer == null || buffer.Length == 0)
{
Log.WriteLog("参数buffer 为null ,或者长度为 0");
// throw new ArgumentException("参数buffer 为null ,或者长度为 0");
}
#region//自动识别并发送长度
int len = buffer.Length;
byte[] btLen = Encoding.UTF8.GetBytes(len.ToString()+"|");
byte[] btLenForSend = new byte[512];
btLen.CopyTo(btLenForSend, 0);
socket.Send(btLenForSend);
#endregion
int flag = 0;
try
{
int left = buffer.Length;
int sndLen = 0;
int curSendlen = 0;
while (true)
{
//if ((socket.Poll(outTime * 1000000, SelectMode.SelectWrite) == true))
//{
try
{
// 收集了足够多的传出数据后开始发送
curSendlen = socket.Send(buffer, sndLen, left, SocketFlags.None);
sndLen += curSendlen;
// left -= sndLen;
left -= curSendlen;
if (left == 0)
{ // 数据已经全部发送
flag = 0;
Ip.TCPtrance.Log.WriteControlText("【√】网络正确发送(flag = 0)" + " " + " 发送结果状态【" + flag.ToString() + "】 ", Form1.richTextBox1);
break;
}
else
{
if (curSendlen > 0)
{ // 数据部分已经被发送
continue;
}
else
{ // 发送数据发生错误
flag = -2;
break;
}
}
}
catch
{
flag = -1;
break;
}
//else
//{ // 超时退出
// flag = -1;
// break;
//}
}
}
catch (SocketException e)
{
Log.WriteLog(e);
flag = -3;
}
return flag;
}
#endregion
#region//自动识别长度接收数据
public static int temFlg = 0;
public static byte [] RecvData(Socket socket, byte[] buffer, int outTime,string forDataOnly)
{
if (socket == null || socket.Connected == false)
{
Log.WriteLog("参数socket 为null,或者未连接到远程计算机");
// throw new ArgumentException("参数socket 为null,或者未连接到远程计算机");
}
if (buffer == null || buffer.Length == 0)
{
Log.WriteLog("参数buffer 为null ,或者长度为 0");
//throw new ArgumentException("参数buffer 为null ,或者长度为 0");
}
#region//接长度并自动调整接收内存byte[]的大小
int btlenInt = BufferAutoLength(socket);
buffer = new byte[btlenInt];
#endregion
buffer.Initialize();
int left = buffer.Length;
int curRcv = 0;
int Rcvlen = 0;
int flag = 0;
int recTimes = 0;
try
{
while (true)
{
//if (socket.Poll(outTime * 1000000, SelectMode.SelectRead))
//{
try
{
// 已经有数据等待接收
curRcv = socket.Receive(buffer, Rcvlen, left, SocketFlags.None);
recTimes++;
left -= curRcv;
Rcvlen += curRcv;
if (left == 0)
{ // 数据已经全部接收
flag = 0;
Ip.TCPtrance.Log.WriteControlText("【√】网络正确接收(flag = 0)" + " " + " 发送结果状态【" + flag.ToString() + "】 ", Form1.richTextBox1);
break;
}
else
{
if (curRcv > 0)
{ // 数据已经部分接收
continue;
}
else
{ // 出现错误
flag = -2;
Ip.TCPtrance.Log.WriteControlText("【×】网络错误接收(flag = -2)" + " " + " 发送结果状态【" + flag.ToString() + "】 ", Form1.richTextBox1);
break;
}
}
}
catch
{
flag = -1;
Ip.TCPtrance.Log.WriteControlText("【×】网络错误接收(flag = -1)" + " " + " 发送结果状态【" + flag.ToString() + "】 ", Form1.richTextBox1);
break;
}
//}
//else
//{ // 超时退出
//}
}
}
catch (SocketException e)
{
Log.WriteLog(e);
flag = -3;
}
//return flag ; ;
temFlg = flag;
Ip.TCPtrance.Log.WriteControlText("【 】网络接收次数 =" + " " + " 【" + recTimes.ToString() + "】 ", Form1.richTextBox1);
return buffer;
}
private static int BufferAutoLength(Socket socket)
{
byte[] btlen = new byte[512];
socket.Receive(btlen);
string btlenStr = Encoding.UTF8.GetString(btlen).Split(new char[] { '|' })[0];
//while (btlenStr == "HBstoped")
//{
// socket.Receive(btlen);
// btlenStr = Encoding.UTF8.GetString(btlen).Split(new char[] { '|' })[0];
//}
int btlenInt = 0;
try { btlenInt = Convert.ToInt32(btlenStr); }
catch { Log.WriteLog("接收长度失败"); }
return btlenInt;
}
#endregion
#region//自动识别长度发送数据
public static int SendData(Socket socket, byte[] buffer, int outTime,string ForSendDataOnly)
{
if (socket == null || socket.Connected == false)
{
Log.WriteLog("参数socket 为null,或者未连接到远程计算机");
// throw new ArgumentException("参数socket 为null,或者未连接到远程计算机");
}
if (buffer == null || buffer.Length == 0)
{
Log.WriteLog("参数buffer 为null ,或者长度为 0");
// throw new ArgumentException("参数buffer 为null ,或者长度为 0");
}
#region//自动识别并发送长度
int len = buffer.Length;
byte[] btLen = Encoding.UTF8.GetBytes(len.ToString()+"|");
byte[] btLenForSend = new byte[512];
btLen.CopyTo(btLenForSend, 0);
socket.Send(btLenForSend);
#endregion
int flag = 0;
try
{
int left = buffer.Length;
int sndLen = 0;
while (true)
{
//if ((socket.Poll(outTime * 1000000, SelectMode.SelectWrite) == true))
//{
try
{
// 收集了足够多的传出数据后开始发送
sndLen = socket.Send(buffer, sndLen, left, SocketFlags.None);
left -= sndLen;
if (left == 0)
{ // 数据已经全部发送
flag = 0;
break;
}
else
{
if (sndLen > 0)
{ // 数据部分已经被发送
continue;
}
else
{ // 发送数据发生错误
flag = -2;
break;
}
}
}
catch
{
flag = -1;
break;
}
//else
//{ // 超时退出
// flag = -1;
// break;
//}
}
}
catch (SocketException e)
{
Log.WriteLog(e);
flag = -3;
}
return flag;
}
#endregion
#region//自动识别长度接收数据
public static int temFlg = 0;
public static byte [] RecvData(Socket socket, byte[] buffer, int outTime,string forDataOnly)
{
if (socket == null || socket.Connected == false)
{
Log.WriteLog("参数socket 为null,或者未连接到远程计算机");
// throw new ArgumentException("参数socket 为null,或者未连接到远程计算机");
}
if (buffer == null || buffer.Length == 0)
{
Log.WriteLog("参数buffer 为null ,或者长度为 0");
//throw new ArgumentException("参数buffer 为null ,或者长度为 0");
}
#region//接长度并自动调整接收内存byte[]的大小
int btlenInt = BufferAutoLength(socket);
buffer = new byte[btlenInt];
#endregion
buffer.Initialize();
int left = buffer.Length;
int curRcv = 0;
int flag = 0;
try
{
while (true)
{
//if (socket.Poll(outTime * 1000000, SelectMode.SelectRead))
//{
try
{
// 已经有数据等待接收
curRcv = socket.Receive(buffer, curRcv, left, SocketFlags.None);
left -= curRcv;
if (left == 0)
{ // 数据已经全部接收
flag = 0;
break;
}
else
{
if (curRcv > 0)
{ // 数据已经部分接收
continue;
}
else
{ // 出现错误
flag = -2;
break;
}
}
}
catch
{
flag = -1;
break;
}
//}
//else
//{ // 超时退出
//}
}
}
catch (SocketException e)
{
Log.WriteLog(e);
flag = -3;
}
//return flag ; ;
temFlg = flag;
return buffer;
}
private static int BufferAutoLength(Socket socket)
{
byte[] btlen = new byte[512];
socket.Receive(btlen);
string btlenStr = Encoding.UTF8.GetString(btlen).Split(new char[] { '|' })[0];
int btlenInt = 0;
try { btlenInt = Convert.ToInt32(btlenStr); }
catch { Log.WriteLog("接收长度失败"); }
return btlenInt;
}
#endregion