• 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)]

  • 相关阅读:
    使用MVC框架中要注意的问题(八):HandleError
    HttpModule中真的不能读写Session吗?
    使用MVC框架中要注意的问题(二):将Model和Controller单独用一个项目设计
    Linq TO SQL 虽好,但不要滥用
    div如何实现左右两个panel并排,而且高度一致
    Required Content Placeholders in SharePoint Masterpages
    LINQ TO SQL:直接执行查询和命令
    使用MVC框架中要注意的问题(三):如何为链接指定路径
    SharePoint Server 2007 页面模型{转载}
    使用MVC框架中要注意的问题(四):ActionLink只是执行Get的操作
  • 原文地址:https://www.cnblogs.com/tgdjw/p/4506771.html
Copyright © 2020-2023  润新知