مهرداد سیف زاده
سه شنبه 13 خرداد 1393, 13:10 عصر
سلام دوستان. برنامه dll رو نوشتم و الان کار میکنه ولی هر بار باید متد getData رو توسط timer هر ثانیه بخونم تا ببینم داده های جدید اومده یا نه که این طور حتی داده های قبلی رو بازم میگیرم.
مشکل من این جاست که میخوام پاکت جدید اومد و رشته ازش جدا شد به برنامه اصلی پاس داده بشه. توی نت خیلی گشتم و راه حلش رو پیدا کردم ولی دانش #c من به حدی نیست که بتونم از Event در این برنامه استفاده کنم و رشته رو به برنامه پاس بدم.
ممنون میشم کمکم کنید
http://stackoverflow.com/questions/16494284/how-to-generate-callback-event-from-library-to-application-in-c-sharp
http://stackoverflow.com/questions/20876520/callback-method-indirectly-calling-back-itself
private static Socket sk;
public static int portNumber;
private static string udpData;
public static void init(int port)
{
portNumber = port;
sk = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sk.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
EndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, port);
sk.Bind(RemoteIpEndPoint);
byte[] buffer = new byte[3000];
sk.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref RemoteIpEndPoint, new AsyncCallback(recv), buffer);
}
public static string getData()
{
return udpData;
}
private static void recv(IAsyncResult res)
{
try
{
EndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, portNumber);
int size = sk.EndReceiveFrom(res, ref RemoteIpEndPoint);
if (size > 0)
{
byte[] reciveData = new byte[1464];
reciveData = (byte[])res.AsyncState;
ASCIIEncoding encodeing = new ASCIIEncoding();
udpData = encodeing.GetString(reciveData);
}
byte[] buffer = new byte[3000];
// eventRecive = "";
sk.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref RemoteIpEndPoint, new AsyncCallback(recv), buffer);
}
catch (Exception e)
{
udpData = e.Message;
}
}
مشکل من این جاست که میخوام پاکت جدید اومد و رشته ازش جدا شد به برنامه اصلی پاس داده بشه. توی نت خیلی گشتم و راه حلش رو پیدا کردم ولی دانش #c من به حدی نیست که بتونم از Event در این برنامه استفاده کنم و رشته رو به برنامه پاس بدم.
ممنون میشم کمکم کنید
http://stackoverflow.com/questions/16494284/how-to-generate-callback-event-from-library-to-application-in-c-sharp
http://stackoverflow.com/questions/20876520/callback-method-indirectly-calling-back-itself
private static Socket sk;
public static int portNumber;
private static string udpData;
public static void init(int port)
{
portNumber = port;
sk = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sk.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
EndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, port);
sk.Bind(RemoteIpEndPoint);
byte[] buffer = new byte[3000];
sk.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref RemoteIpEndPoint, new AsyncCallback(recv), buffer);
}
public static string getData()
{
return udpData;
}
private static void recv(IAsyncResult res)
{
try
{
EndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, portNumber);
int size = sk.EndReceiveFrom(res, ref RemoteIpEndPoint);
if (size > 0)
{
byte[] reciveData = new byte[1464];
reciveData = (byte[])res.AsyncState;
ASCIIEncoding encodeing = new ASCIIEncoding();
udpData = encodeing.GetString(reciveData);
}
byte[] buffer = new byte[3000];
// eventRecive = "";
sk.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref RemoteIpEndPoint, new AsyncCallback(recv), buffer);
}
catch (Exception e)
{
udpData = e.Message;
}
}