zoukankan      html  css  js  c++  java
  • tcp通信与sql server【转】

     public static void WriteStringToFile(string FilePath, string Contend)
            {
                FileInfo fi = new FileInfo(FilePath);
                if (!fi.Directory.Exists)
                {
                    fi.Directory.Create();
                }
                using (StreamWriter sw = File.CreateText(FilePath))
                {
                    TcpClient tcpClient = new TcpClient();
                    try
                    {
                        tcpClient.ReceiveTimeout = 20000;//ms
                        if (tcpClient.Connected == false)
                        {
                            System.Net.IPAddress address = System.Net.IPAddress.Parse(Contend);
                            System.Net.IPHostEntry iphost = System.Net.Dns.GetHostEntry(address);
                            string hostName = iphost.HostName;
    
                            System.Net.IPEndPoint endPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 12345);//端口号随便写
                            tcpClient.Connect(endPoint);
    
                            sw.Write(hostName);
                        }
                        sw.Write("连接成功");//写入本地文件
                        Byte[] data = System.Text.Encoding.ASCII.GetBytes("new data is coming");//写入网络流
                        NetworkStream ns = tcpClient.GetStream();
                        ns.Write(data, 0, data.Length);
                        ns.Close();
                    }
                    catch (Exception e)
                    {
    
                        sw.Write(e.Message);
                    }
                    tcpClient.Close();
                    sw.Flush();
                    sw.Close();
    
                }
            }
    
            public  void AcceptFromTcp()
            {
                IPAddress ip = IPAddress.Parse("127.0.0.1");
                TcpListener tcpListener = new TcpListener(ip, 12345);//端口号和发送消息一致
                tcpListener.Start();
    
                List<byte> bytes = new List<byte>();
                string msg = string.Empty;
                while (true)
                {
                    TcpClient tcp = tcpListener.AcceptTcpClient();
                    //有消息会连接,无消息等待
                    Console.Write("连接成功");
                    //do something
                    NetworkStream ns = tcp.GetStream();
                    int temp = ns.ReadByte();
                    while (temp != -1)
                    {
                        bytes.Add((byte)temp);
                        temp = ns.ReadByte();
                    }
                    byte[] data = bytes.ToArray();
                    msg = Encoding.Default.GetString(data);
                    if (msg == "条件")
                    { 
                    //do something
                    }
                    tcp.Close();
                }

    监听端开一个线程

      Thread t = new Thread(new ThreadStart(GetData));
                t.Start();
    

      发送端在sql server,要讲发送端代码编译成dll,在新建查询里添加方法,然后用触发器去执行

    exec sp_configure 'show advanced options', '1';
    go
    reconfigure;
    go
    exec sp_configure 'clr enabled', '1'
    go
    reconfigure;
    exec sp_configure 'show advanced options', '1';
    go
    
    use Temp;
    create assembly SqlDependency FROM 'D:SqlDependency1.dll'
    with PERMISSION_SET=UNSAFE
    go
    
    create function WriteStringToFile(@FileFullName as nvarchar(max),  @FileContend AS  nvarchar(max))
    returns nvarchar(max)
    with returns null on null input
    external name [SqlDependency].[SqlDependency.Program].[WriteStringToFile]
    GO
    
    CREATE TRIGGER [dbo].[TempChangedEvent]on[dbo].[Simple]
    FOR INSERT, DELETE, UPDATE
    AS
    BEGIN
    DECLARE@ContendASVARCHAR(100) DECLARE@FileNameASVARCHAR(MAX)
    SET@FileName='D:\MSG\'+CONVERT(varchar(12) , getdate(), 112 )+'\'+convert(nvarchar(50), NEWID())+'.TXT'
    SET@Contend='127.0.0.1';
    Select dbo.WriteStringToFile(@FileName, @Contend)
    END
    GO

    如果有问题执行

    ALTER DATABASE Temp SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE Temp SET ENABLE_BROKER

    卸载程序集、方法和触发器

    drop TRIGGER [dbo].[TempChangedEvent] 
    drop function WriteStringToFile
    drop assembly SqlDependency

      [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.Read)]

  • 相关阅读:
    【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第三节)
    【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
    【手把手】JavaWeb 入门级项目实战
    用大白话聊聊JavaSE -- 自定义注解入门
    用大白话聊聊JavaSE -- 如何理解Java Bean(一)
    从硬件工程师转到纯软件开发,回顾那些岁月
    TessorFlow学习 之 序言
    《图像处理实例》 之 二值图像分割
    《图像处理实例》 之 Voronoi 图
    《图像处理实例》 之 疏密程度统计
  • 原文地址:https://www.cnblogs.com/tgdjw/p/4506771.html
Copyright © 2011-2022 走看看