{
int flag = 0;
try
{
StartClient();
byte[] btySendHead = new byte[32];
string strData = string.Empty;
{
case "String":
strData = objData.ToString();
btyData = Encoding.ASCII.GetBytes(strData);
structHead.MessageLength = strData.Length;
break;
case "BaseDataContainer":
btyData = TransDataToByteArray(objData, BasePage.enumParamType.BaseDataContainer.ToString());
structHead.MessageLength = btyData.Length;
break;
default:
break;
}
btyData.CopyTo(bytSendData, btySendHead.Length);
{
throw new ArgumentException("參數socket 為null,或者未連接到遠程計算機");
}
if (bytSendData == null || bytSendData.Length == 0)
{
throw new ArgumentException("參數buffer 為null ,或者長度為 0");
}
int sndLen = 0;
{
if ((m_clientSocket.Poll(outTime * 1000000, SelectMode.SelectWrite) == true))// 收集了足够多的傳出數據后開始發送
{
sndLen = this.m_clientSocket.Send(bytSendData, sndLen, left, SocketFlags.None);
left -= sndLen;
if (left == 0)
{ // 數據已經全部發送
flag = 0;
break;
}
else
{
if (sndLen > 0)
{ // 數據已經部分被發送
continue;
}
else
{ // 發送數據發生錯誤
flag = -2;
break;
}
}
}
{ // 超時退出
flag = -1;
break;
}
catch (System.NullReferenceException e)
{
MessageBox.Show("連接失敗", "INF:001", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception e)
{
MessageBox.Show("發送失敗", "INF:001", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
this.close();
}
return flag;
}
{
if (firstFlag == true)
{
tcpListener = new TcpListener(receivePort);
tcpListener.Start();
}
{
listenSocket = tcpListener.AcceptSocket();
byte[] receiveByte = new byte[1024];
byte[] bytReceiveData = null;
TcpHead structReceiveHead;
object objStructReceiveHead;
int count = 0;
int messageLength;
int buffLength;
{
bytes = listenSocket.Receive(receiveByte, receiveByte.Length, SocketFlags.None);
bytTcpHead = receiveByte;
isHead = false;
break;
}
objStructReceiveHead = TransByteArrayToObject(bytTcpHead, BasePage.enumParamType.Struct.ToString());
structReceiveHead = (TcpHead)objStructReceiveHead;
{
buffLength = messageLength / 1024;
}
else
{
buffLength = messageLength / 1024 + 1;
}
if (count == 0)
{
bytReceiveData = new byte[buffLength * 1024];
}
{
bytes = listenSocket.Receive(receiveByte, receiveByte.Length, SocketFlags.None);
if (bytes <= 0)
break;
receiveByte.CopyTo(bytReceiveData, count * 1024);
count++;
}
htTcpHead.Add("objReceiveData", objReceiveData);
}
}
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream memoryStream = new MemoryStream();
byte[] buff = null;
{
case "String":
string tempStr = objectParam.ToString();
Char[] tempChar = tempStr.ToCharArray();
break;
case "BaseDataContainer":
bf.Serialize(memoryStream, objectParam);
buff = memoryStream.ToArray();
break;
case "Struct":
bf.Serialize(memoryStream, objectParam);
byte[] tempByte = memoryStream.ToArray();
tempByte.CopyTo(buff, 0);
{
buff.SetValue(Byte.Parse("1"), k);
}
break;
default:
break;
}
}
{
if (paramType.Equals("String"))
{
return object_temp;
}
else if (paramType.Equals("BaseDataContainer"))
{
MemoryStream memoryStream = new MemoryStream(byteTemp);
BinaryFormatter bf = new BinaryFormatter();
BaseDataContainer object_temp = (BaseDataContainer)bf.Deserialize(memoryStream);
}
else if (paramType.Equals("Struct"))
{
MemoryStream memoryStream = new MemoryStream(byteTemp);
BinaryFormatter bf = new BinaryFormatter();
TcpHead object_temp = (TcpHead)bf.Deserialize(memoryStream);
return object_temp;
}
else
{
return "Exception";
}
}
public string GetHostIP()
{
string strHostname = Dns.GetHostName();
IPHostEntry strIP = Dns.GetHostEntry(strHostname);
string localIPStr = strIP.AddressList[0].ToString();
IPAddress localIP = IPAddress.Parse(localIPStr);
return localIPStr;
}
#endregion
{
//Connect to a remote device.
try
{
IPHostEntry ipHostInfo = Dns.Resolve(this.m_strServerIP);
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, this.m_nServerPort);
this.m_clientSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
if (m_clientSocket.Connected)
{
close();
}
this.m_clientSocket.Connect(remoteEP);
}
catch (Exception e)
{
this.ReportError("StartClient found a error:\r\n" + e.ToString());
}
}