using System; using System.Collections.Generic; //using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; using System.Windows.Forms; namespace IOM_cs { public sealed class SocketHelper { /// <summary> /// 向远程主机发送数据 /// </summary> /// <param name="socket">要发送数据且已经连接到远程主机的 Socket</param> /// <param name="buffer">待发送的数据</param> /// <param name="outTime">发送数据的超时时间,以秒为单位,可以精确到微秒</param> /// <returns>0:发送数据成功;-1:超时;-2:发送数据出现错误;-3:发送数据时出现异常</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要发送 /// </remarks> public static int SendData(string ipStr, string portStr,string msg) { int flag = 0; if (String.IsNullOrEmpty(ipStr) || String.IsNullOrEmpty(portStr)) { throw new ArgumentException("请设置ip和端口号"); } IPAddress ip = IPAddress.Parse(ipStr); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { //连接服务端 socket.Connect(ip, Convert.ToInt32(portStr)); byte[] buffer = Encoding.UTF8.GetBytes(msg); socket.Send(buffer); socket.Close(); } catch { MessageBox.Show("连接"+ip+"失败!"); flag = -1; } return flag; } /// <summary> /// 向远程主机发送文件 /// </summary> /// <param name="socket" >要发送数据且已经连接到远程主机的 socket</param> /// <param name="fileName">待发送的文件名称</param> /// <param name="maxBufferLength">文件发送时的缓冲区大小</param> /// <param name="outTime">发送缓冲区中的数据的超时时间</param> /// <returns>0:发送文件成功;-1:超时;-2:发送文件出现错误;-3:发送文件出现异常;-4:读取待发送文件发生错误</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要发送 /// </remarks> //public static int SendFile(Socket socket, string fileName, int maxBufferLength, int outTime) //{ // if (fileName == null || maxBufferLength <= 0) // { // throw new ArgumentException("待发送的文件名称为空或发送缓冲区的大小设置不正确."); // } // int flag = 0; // try // { // FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); // long fileLen = fs.Length; // 文件长度 // long leftLen = fileLen; // 未读取部分 // int readLen = 0; // 已读取部分 // byte[] buffer = null; // if (fileLen <= maxBufferLength) /* 文件较小,可以一次读取完*/ // { // buffer = new byte[fileLen]; // readLen = fs.Read(buffer, 0, (int)fileLen); // flag = SendData(socket, buffer, outTime); // } // else /* 文件较大,循环读取并发送 */ // { // while (leftLen != 0) // { // if (leftLen < maxBufferLength) // { // buffer = new byte[leftLen]; // readLen = fs.Read(buffer, 0, Convert.ToInt32(leftLen)); // } // else // { // buffer = new byte[maxBufferLength]; // readLen = fs.Read(buffer, 0, maxBufferLength); // } // if ((flag = SendData(socket, buffer, outTime)) < 0) // { // break; // } // leftLen -= readLen; // } // } // fs.Flush(); // fs.Close(); // } // catch (IOException e) // { // flag = -4; // } // return flag; //} } }