Newer
Older
IRIS_COLLECT / IOM_cs / tool / SocketHelper.cs
yangqianqian on 29 Dec 2020 4 KB first
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;
        //}




    }
}