解决方案 »
- 求 开源TCP Server
- 页面未响应,不知道原因在哪里???
- 如何更改windows7下的系统默认打开程序?
- 请教 C# p2p点对点 传输 问题
- 求关于线程和进程操作的电子书啊有关于同步,异步和互斥这些的
- 扫雷游戏实现中的控件问题
- 想用LinkLabel来指向email,请问如何设置.指向网址呢?
- C#进程与C++进程之间的相互通信问题。
- 怎样将这个Xml 文件内容全部显示到一个 listview 控件上.
- 数据库连接池对Access数据库操作时有用吗?
- Devexpress第三方控件 点击GridControl控件指定的某列变成下拉框 选择下拉框不同的值另一列对应的值会发生改变
- 请教DataGridView增加新行问题
今天研究了一天。先设想的是在系统服务中设置成可以与用户交互——直接显示窗口,可这样在win7系统里又存在问题。如果使用API到时可以实现,不过也是在调用别一个EXE 文件,所以我才想到这上边说的方式。就是不知道具体怎么让程序与系统服务交互。得到系统服务做了那些操作。系统服务里怎么设置 , 窗口程序又可怎么获取。
1、windows服务作为服务端,应用程序作为客户端
2、定义数据包格式。
3、服务端负责处理数据库中的数据,每处理完一条,就把处理的数据和处理的结果封装成数据包send给客户端,客户端receive数据包
4、客户端解析收到数据包,把解析的数据体现在界面上。
private void Server()
{
int n;
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("服务器IP地址"), 9001);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipep);
socket.Listen(10);
Thread thread = new Thread(new ThreadStart(new Action(() =>
{
while (true)
{
Socket client = socket.Accept();
SqlConnection con = new SqlConnection("数据库连接串");
SqlCommand cmd = new SqlCommand("sql", con);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
string data = "sql|" + i; //在这里封装数据,通常是自己定义一种数据结构,如struct data{sql;result}
client.Send(Encoding.Default.GetBytes(data));
}
})));
} //应用程序接收数据
private void Client()
{
byte[] buffer = new byte[1024];
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("服务器IP地址"), 9001);
socket.Connect(ipep);
Thread thread = new Thread(new ThreadStart(new Action(() =>
{
while (true)
{
int n = socket.Receive(buffer);
string data = Encoding.ASCII.GetString(buffer, 0, n);
string sql = data.Split('|')[0]; //解析数据包
string result = data.Split('|')[1];
this.textBox2.Invoke(new Action(() => this.textBox2.Text = sql)); //把接收的数据呈现到客户端界面
this.textBox3.Invoke(new Action(() => this.textBox3.Text = result));
}
})));
}
来人呐,兄弟有难!
http://bbs.csdn.net/topics/390128212