今天终于通过sql 2005里面的 SQL 2005 CRL 函数

完成了向客服端信息传送

sql 语句:

SQL SERVER:

 

use xp_aion


exec sp_configure 'clr enabled',1 
reconfigure 
go

 

Alter Database xp_aion SET TRUSTWORTHY ON


CREATE ASSEMBLY [System.Net.Sockets] from 'C:\classScoket.dll'    //已编译的dll文件 里面含有Send方法
with permission_set=unsafe

 


CREATE FUNCTION dbo.clrHelloWorld 

    @message as nvarchar(200)
 
)  
RETURNS nvarchar(200) 
AS EXTERNAL NAME [System.Net.Sockets].[classScoket.Class1].classscoket

 

//sql执行
SELECT dbo.clrHelloWorld('Mark')

 

 //dll文件方法

classScoket.dll:

public static string classscoket(string mes)
        {
          

          
            string msg = mes;
           
            TcpClient tcpc = new TcpClient("192.168.2.107", 5656);
            NetworkStream tcpStream = tcpc.GetStream();
            StreamWriter reqStreamW = new StreamWriter(tcpStream);
            reqStreamW.Write(msg);
            reqStreamW.Flush();
            tcpStream.Close();
            tcpc.Close();
            return (mes);


        }

 

客户端接收函数(一直处于监听状态):

 private void Listen()
        {
          
            try
      {
     TcpListener tcpl = new TcpListener(5656);

             tcpl.Start();
       while (true)
       {

           Socket s = tcpl.AcceptSocket();
           Byte[] stream = new Byte[80];
           int i = s.Receive(stream);
           string message = System.Text.Encoding.UTF8.GetString(stream);
           MessageBox.Show(message);
          
       }
      }
    catch(System.Security.SecurityException)
      {
   MessageBox.Show("防火墙安全错误!","错误",
        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

 

      }
    catch(Exception)
        {
     
    }
           
}

 

图片

 

 通过执行     SELECT dbo.clrHelloWorld('Mark')

目标机器:

图片

 

然后通过数据库的insert触发器 调用dbo.clrHelloWorld函数,dbo.clrHelloWorld函数再调用classScoket.dll

里面的classscoket方法向目标机器发送信息

这里IPaddress 是局域网内的 

 

同时实验了通过自己外网地址来发送信息,不过首先要配置好网关和对应的端口。

posted on 2009-12-18 17:10  starwar3  阅读(430)  评论(0编辑  收藏  举报