今天终于通过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 是局域网内的
同时实验了通过自己外网地址来发送信息,不过首先要配置好网关和对应的端口。