windows服务,大家进来帮忙 我需要实现一个功能,就是当客户端(asp.net)发送一个我认为有价值的消息到服务器,然后我这边在服务器上做一个windows服务监听。要怎么才能发送让服务到抓到。发送的消息不写入数据库大家帮帮忙,提供个思路也行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 消息到服务器如何放这个消息?用消息队列还是文件?windows服务监听只能是定时去消息服务器读取一下。这样的设计感觉有点别扭。感觉在消息服务器收到消息后发送给所有的应用吧。 主要是客户端发送信息来了后,在服务器上了,我还没想清楚怎么让服务接受。在文件里面估计不是很现实。socket我考虑中 如果消息量不大的话可以用aspx写文件,服务定时读取文件,对比最后写入时间.读取内容. 每天1K条以下的都可以这反做了,可以按日期建文件. Socket监听写起来比较烦 socket加上timer可以实现,也不是很麻烦贴部分代码,不是我写的,但是一直在用: // 负责监听的线程 private System.Threading.Thread m_thread; // 本地IP地址 private string m_tcpIPAddress; //监听的端口 private int m_tcpListeningPort; // 最大同时异步连接 private int m_tcpListeningPortBacklog; // 指示服务是否停止的标志位 private bool m_fShutdown; protected override void OnStart(string[] args) { m_thread = new Thread(new ThreadStart(ListenerThread)); m_thread.Start(); } protected override void OnStop() { m_fShutdown = true; m_evtListen.Set(); } private void ListenerThread() { IPEndPoint localEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(m_tcpIPAddress), m_tcpListeningPort); // 创建套接字 Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 将套接字和本地终结点绑定,监听端口 try { listener.Bind(localEndPoint); listener.Listen(m_tcpListeningPortBacklog); while (!m_fShutdown) { m_evtListen.Reset(); listener.BeginAccept(new AsyncCallback(AcceptCallback), listener); //等连接建立后再继续 m_evtListen.WaitOne(); } } catch (Exception exp) { } } private void AcceptCallback(IAsyncResult ar) { //指示主线程继续 m_evtListen.Set(); try { Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); MyObject state = new MyObject(); state.workSocket = handler; handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } catch (Exception exp) { } } private void ReadCallback(IAsyncResult ar) { string content; int index, start, startLast, end, lenEnd; MyObject state = (MyObject)ar.AsyncState; Socket handler = state.workSocket; try { int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { string buffer = Encoding.ASCII.GetString(state.buffer, 0, bytesRead); //以下对接受到的数据进行处理MyObject是一个自定义的类: private class MyObject { public Socket workSocket = null; // 接受缓冲区的大小 public const int BufferSize = 2048; // 接受缓冲区 public byte[] buffer = new byte[BufferSize]; // 接受到的字符串 public StringBuilder sb = new StringBuilder(); // MAC地址 public char[] mac_addr = null; } 关于vs2005 数据连接字符串的问题? A标签样式问题 关于datalist的分页问题! 急!!!!!!!!!!!!!!!求详细商品网站的需求分析,越详细越好,谢谢 数据库转化字段,与模板列绑定 关于解决方案中引用的问题! 初手提问简单问题 在回调中绑定gridview,存放于服务器端 顶级难题,非高莫入.............. Datagrid中如何实现在column里显示并可编辑checkbox控件的问题。 URL加密 特急,跪求解决方案。创建网站快捷方式。
可以用aspx写文件,服务定时读取文件,对比最后写入时间.读取内容. 每天1K条以下的都可以这反做了,可以按日期建文件. Socket监听写起来比较烦
贴部分代码,不是我写的,但是一直在用:
// 负责监听的线程
private System.Threading.Thread m_thread;
// 本地IP地址
private string m_tcpIPAddress;
//监听的端口
private int m_tcpListeningPort;
// 最大同时异步连接
private int m_tcpListeningPortBacklog;
// 指示服务是否停止的标志位
private bool m_fShutdown; protected override void OnStart(string[] args)
{
m_thread = new Thread(new ThreadStart(ListenerThread));
m_thread.Start();
} protected override void OnStop()
{
m_fShutdown = true;
m_evtListen.Set();
} private void ListenerThread()
{
IPEndPoint localEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(m_tcpIPAddress), m_tcpListeningPort); // 创建套接字
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 将套接字和本地终结点绑定,监听端口
try
{
listener.Bind(localEndPoint);
listener.Listen(m_tcpListeningPortBacklog); while (!m_fShutdown)
{
m_evtListen.Reset(); listener.BeginAccept(new AsyncCallback(AcceptCallback), listener); //等连接建立后再继续
m_evtListen.WaitOne();
} }
catch (Exception exp)
{ }
} private void AcceptCallback(IAsyncResult ar)
{
//指示主线程继续
m_evtListen.Set(); try
{
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar); MyObject state = new MyObject();
state.workSocket = handler;
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
catch (Exception exp)
{ }
} private void ReadCallback(IAsyncResult ar)
{
string content;
int index, start, startLast, end, lenEnd; MyObject state = (MyObject)ar.AsyncState;
Socket handler = state.workSocket; try
{
int bytesRead = handler.EndReceive(ar); if (bytesRead > 0)
{
string buffer = Encoding.ASCII.GetString(state.buffer, 0, bytesRead);
//以下对接受到的数据进行处理MyObject是一个自定义的类:
private class MyObject
{
public Socket workSocket = null;
// 接受缓冲区的大小
public const int BufferSize = 2048;
// 接受缓冲区
public byte[] buffer = new byte[BufferSize];
// 接受到的字符串
public StringBuilder sb = new StringBuilder();
// MAC地址
public char[] mac_addr = null;
}