You have identified your problem. If you intend to use a single buffer for sending and receiving, then your receive must not block. Instead of causing the receive thread to not block, use separate buffers for reading and writing. Then you won't need a mutex to control access to the buffer.
Thanks for your reply, but of course I'm not using the same buffer for sending and receiving. I just protect the receiving buffer because it is used in the BackgroundWorker method (for the Socket::Receive() method) and in the RunWorkerCompletedEventHandler (which runs in the main thread context, the same thread that is used to send bytes through the socket).
I have a multiple instances that bind and listen to the same UDP (with same IP and Port #).
Is it possible to do that?
I set my UDP socket to REUSEADDRESS, but it seems only 1 instance receives the data. The rest are not.
We are presently upgrading from .Net 2003 to 2005. We have an application that invokes an FTP client asynchronously via a process component, redirecting standard output to a log file. In .Net 2003, all of standard output is redirected to the log file, however, in .Net 2005, only the commands we are passing to the ftp client are redirected to the log file. All of the FTP responses ie: “1000 bytes transmitted in 2 seconds”, etc. are not redirected to the log file.
The relevant lines of code are as follows:
Dim myProcess As New Process
myProcess.StartInfo.FileName = "FTP.exe"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.RedirectStandardOutput = True
Dim myStreamReader As StreamReader = myProcess.StandardOutput
Dim myStreamWriter As StreamWriter = File.AppendText(“myLog.txt”)
While Not sLine Is Nothing
sLine = myStreamReader.ReadLine()
Does anyone know if changes were made with regard to the redirect of standard output for process components?
Thanks in advance for your replies.
Perhaps it would be better to just start the process you want to debug and then use the debug process to hook into the thing you want to debug. If one of the projects you are trying to debug is a windows service, using the debug processes is a good way to debug.
I have 2 instances of server.
Both instances create UDP socket listening for incoming messages.
It seems that only 1 instace of my server can listen to the messages, the other seems to see that the UDP socket is not available when it suppose to receive.
Below are portion of my code:
Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); udpSocket.SetSocketOption(SocketOptionLevel.Socket ,SocketOptionName.ReceiveBuffer,BufferCapacity);
udpSocket.SetSocketOption(SocketOptionLevel.Socket , SocketOptionName.ReuseAddress, 1);
int servicePort = (int)transport.Properties["port"];
System.Net.IPEndPoint localEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, servicePort);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEndPoint = (EndPoint)sender;
//This call is made to yield processor resources, Remote Client doesn't
//consume 100% of the CPU.
while (keepFetching && (udpSocket.Available > 0)) //only if data is available..
NOTE: The 2nd instance see that the udpSocket.Available is 0. While the 1st instance can see that the udpSocket is greater than 0.
In a multithreading application I was wondering if I need to worry about 2 seperate threads overwriting each other's local variables.
In other words if 2 seperate threads called the same function at the same time would the compiled program in essence create 2 sets of local variables, one for each thread, or is there a risk that they could overwrite each others data?
Read about synclock and monitor. They provide a mechanism that locks an object and blocks other threads from accessing it except the thread that created the lock. When the lock is released the blocked threads are allowed similar lock and access.
I’m writing a C# DLL that executes a web browser. I have to grab a static image when the browser is done updating. So I wrote the following code.
public string SaveImageToFile()
int done = 0;
String file = "";
while (done < 20)
if (((webbrowser1.IsBusy == false) && (webbrowser1.ReadyState == WebBrowserReadyState.Complete)) || (done == 19))
Bitmap docImage = new Bitmap(webbrowser1.Width, webbrowser1.Height);
webbrowser1.DrawToBitmap(docImage, new Rectangle(webbrowser1.Location.X,
webbrowser1.Location.Y, webbrowser1.Width, webbrowser1.Height));
file = "C:\\Rumper\\tempA" + num + ".bmp";
done = 20;
However when I call SaveImageToFile from my MFC application, I get a stackoverflow. If I comment out the DoEvents. No stack overflow and no image.
I need to replace DoEvents, but I’m not sure what would be a better method.
Is this method called from within an event handler? If so, calling DoEvents may be refiring the same event and calling your code again, and again while you are still inside of the While loop. I would suggest removing the event handler at the begining to the SaveImageToFile method, then adding the handler at the end. This can also be done within the Event handler method as well.
I have had way to many headaches for this problem to hit me again, and 99% of the time, it's because the event is being fired before your code completes.
Hope this helps,
"Some people spend an entire lifetime wondering if they made a difference. The Marines don't have that problem."
( President Ronald Reagan)
I'm using serialization of objects for a client-server application, these need to communicate and I want them to send and receive a message (ApiMessage) that contains a base class NetworkElement. There are several types of network elements that derive from this base class.
class NetworkElementX: NetworkElement
When I fill my message with a NetworkElementX and serialize an exception is thrown, the inner exception mentions that class NetworkElementX is not expected and I should use a XmlInclude arghhhh
The technology is great and works in cases when I use an ArrayList to transport objects. I shall try and encapsulate my object in an ArrayList and see if that works.
I've tried all sorts and been going around in circles for ages, if anyone has any pointers it'd be much appreciated.
good morning freinds,
i m designing crystal report in.net framework i.e. bundeled version.
i am preparing payslip, for that i wnt to place watermark image on page.
whn i insert picture by right clicking on the report then it is inserting my backgruound image but lines present on my report go backward & also not shown whn i run the project.
i rightclick on image & send it backward but it lines will not cum in front.
& there is no option of line to bring it forward .
please anyone tell me how should i place background image on my report.
thanks for any help in advance.
"The Difficult i can do it now...
The Impossible will take a little longer."
Last Visit: 20-Jan-20 5:22 Last Update: 20-Jan-20 5:22