Socket通信实例
1: /// <summary>
2: /// 通过Socket与通信服务器通信
3: /// </summary>
4: /// <param name="GroupServerIPAddr">输入参数:通信服务器地址</param>
5: /// <param name="GroupServerIPPort">输入参数:通信服务器端口</param>
6: /// <param name="SendData">输入参数:注册服务器信息</param>
7: /// <returns>返回:ReceiveDataFromSocket数据实体</returns>
8: public static Model.ReceiveDataFromSocket CommunicateToCrossServer(string GroupServerIPAddr, int GroupServerIPPort, byte[] SendData)
   9:          {  10:              IPHostEntry ipHostInfo = Dns.Resolve(GroupServerIPAddr);  11:              IPAddress ipAddress = ipHostInfo.AddressList[0];12: IPEndPoint remoteEP = new IPEndPoint(ipAddress, GroupServerIPPort);
13: byte[] ReceiveData = new byte[0];
14: int ReceiveDataLen=0;
15: string errorStr = "";
16: //创建一个基于TCP的Socket
17: Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
18: try
  19:              {20: //尝试连接
  21:                  client.Connect(remoteEP);  22:              }23: catch (Exception se)
  24:              {25: errorStr = "连接错误" + se.Message;
26: return null;
  27:              }28: try
  29:              {30: //向主机发送请求
  31:                  client.Send(SendData, SendData.Length, 0);  32:              }33: catch (Exception ce)
  34:              {35: errorStr = "发送错误:" + ce.Message;
  36:              }37: int bytes = 0;
38: try
  39:              {40: List<byte[]> tempList = new List<byte[]>();
41: while (true)
  42:                  {43: byte[] temp = new byte[1024];
44: //每次读取1024
  45:                      bytes = client.Receive(temp, 1024, 0);46: if (bytes <= 0)
  47:                      {48: if (ReceiveDataLen != 0)
  49:                          {50: ReceiveData = new byte[ReceiveDataLen];
51: int TempLen = 0;
52: //合并数组
53: for (int i = 0; i <= tempList.Count - 1; i++)
  54:                              {  55:                                  tempList[i].CopyTo(ReceiveData, TempLen);  56:                                  TempLen = TempLen + tempList[i].Length;  57:                              }  58:                          }59: break;
  60:                      }61: else
  62:                      {63: if (bytes == 1024)
  64:                          {  65:                              tempList.Add(temp);  66:                          }67: else
  68:                          {69: byte[] temp2 = new byte[bytes];
  70:                              Array.Copy(temp, 0, temp2, 0, bytes);  71:                              tempList.Add(temp2);  72:     73:                          }  74:                          ReceiveDataLen = bytes + ReceiveDataLen;  75:                      }  76:                  }  77:              }78: catch (Exception ce)
  79:              {80: errorStr = "接收错误" + ce.Message;
81: //禁用Socket
  82:                  client.Shutdown(SocketShutdown.Both);83: //关闭Socket
  84:                  client.Close();85: return null;
  86:              }87: Model.ReceiveDataFromSocket myReceiveData = new RailwayCross2011.Model.ReceiveDataFromSocket();
  88:              myReceiveData.ReceiveData = ReceiveData;  89:              myReceiveData.ReceiveDataLen = ReceiveDataLen;  90:              myReceiveData.errorStr = errorStr;91: //禁用Socket
  92:              client.Shutdown(SocketShutdown.Both);93: //关闭Socket
  94:              client.Close();95: return myReceiveData;
  96:          }流程图说明:
从Socket接收的数据实体说明(由于需要通过WebService调用这个方法,所以一定要系列化)
   1:      [Serializable]2: public class ReceiveDataFromSocket
   3:      {4: /// <summary>
5: /// 从Sokcet接收的数据
6: /// </summary>
7: public byte[] ReceiveData
   8:          {   9:              get;  10:              set;  11:          }12: /// <summary>
13: /// 数据长度
14: /// </summary>
15: public int ReceiveDataLen
  16:          {  17:              get;  18:              set;  19:          }20: /// <summary>
21: /// 出错信息
22: /// </summary>
23: public string errorStr
  24:          {  25:              get;  26:              set;  27:          }  28:      } 
                    
                 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号