|
Sorry about that. I did not realise I had submitted the same question before. It will NOT happen again.
And thanks for the reply too. Atleast now I know how to go about doing it.
-ZT
ZT
|
|
|
|
|
Hi,
I am currently working with some devices with ethernet ports. I need to write a program for those devices to send out broadcast messages when they connect to the network so that the server can talk to them and download neccessary apps.
I tried using UDP Client but it fails to send datagrams to the remote endpoint with the IP address of IPAddress.Broadcast. When I try this i get a
"An unhandled exception of type 'System.ArgumentException' occurred in System.dll" error.
What is the best way for the server to automatically detect a client when a client plugs into the local network?
Cheers,
-Chad
ZT
|
|
|
|
|
ZigmaT wrote:
"An unhandled exception of type 'System.ArgumentException' occurred in System.dll" error.
What does your method call look like where the exception is thrown. This gets thrown when you are passing an invalid arguement to a method.
- Nick Parker My Blog
|
|
|
|
|
code
this.remoteEP = new IPEndPoint(IPAddress.Broadcast, 20000);
UdpClient myUDP = new UdpClient(20000);
myUDP.Send(System.Text.Encoding.ASCII.GetBytes("ImOnlineNow"), 11);
All I want to do is send a broadcast saying the device is available on the network.
So that the when the server receives this message on the specified port it can make a connection to the client and two way communication can occur.
ZT
|
|
|
|
|
ZigmaT wrote:
this.remoteEP = new IPEndPoint(IPAddress.Broadcast, 20000);
UdpClient myUDP = new UdpClient(20000);
myUDP.Send(System.Text.Encoding.ASCII.GetBytes("ImOnlineNow"), 11);
First, you will need to call the Connect method before you can call Send . What line does the exception get thrown at? You also might consider rewriting your send so it looks like:
Byte[] mBytes = Encoding.ASCII.GetBytes("ImOnlineNow");
myUDP.Send(mBytes, mBytes.Length);
- Nick Parker My Blog
|
|
|
|
|
According to my understanding, to call the connect method you need a remote end point. And a remote end point needs an ip address and a port number.
But my devices will not know the ip address of the host its connecting to. That is why the devices need to send out broadcast messages so that the host can respond by initiating a connection. Essentially the device will be like a client and the pc i log into will like be the server. I need to be able to communicate with the device no matter which pc i log onto inside the local network. Atleast that's the idea.
Is this the right way to go about doing this? Or am I barking up the wrong tree here? )
Thanks again for helping me out. Really appreciate it!
-ZT
ZT
|
|
|
|
|
In the UdpClient constructor, you're binding to the same local port for which broadcasts are answered. I'd recommend just using the default constructor and letting the subsystem pick a non-reserved local port as it typically will for most applications. If you need the port that was assigned, you can always get it via ((IPEndPoint)myUDP.Client.LocalEndPoint)).Port .
Ask Nick as before, on which line is the exception thrown and what is the full text (minus the stack trace if you don't mind) of the exception? In the case of a SocketException , more information is needed (and is provided). That's like saying "there was an error" and telling nothing about it. TIA
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi ,
I am currently prgramming a moderately large solution. Many projects have many dependancies with other projects within the same solution. When I try to compile it, VS.NET gives me an error saying it cannot copy certain (compiled) class libraries into the same directory. It says it is because there are already copies of the dlls in the output directory already.
Right now I have merely told the VS not to copy certain dlls locally. This works fine for debug compilations. But often the release compilations tend to crash half way through because it cannot find the specified versions of specific files (dlls).
Please help me Out.....
ZT
ZT
|
|
|
|
|
ZigmaT wrote:
This works fine for debug compilations. But often the release compilations tend to crash half way through because it cannot find the specified versions of specific files (dlls).
Just a guess. Maybe you set this setting for DEBUG setting and you didn't do the same thing in RELEASE setting.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
Thanks for that. Now it compiles. It runs fine too, until it needs to find that particular version of the dll.
So if the program starts okay does it mean my dependancies are okay and the problem is probably with my program? Doesnt VS.NET perform a check of all dependancies before running an application?
Cheers
-Chad
ZT
|
|
|
|
|
The first step is making sur that all projects include project references (not assembly references) to other projects in your solution, which you seem to have done.
Second make sure that no designers are open and that the instance of the IDE was started in the build configuration for which you want to compile. Perform a rebuild.
There is known bugs in VS.NET that have gotten better from 2002 to 2003, but they still exist. Hopefully "Whidbey" (here's hopin' for 2004) will fix this once and for all.
Once more important aspect in large, multi-project solution is to NOT use automatic versioning (using asterisks in the AssembyVersionAttribute ). You can loose control quickly of assembly versions especially if you don't always compile the solution as a whole.
In a week I typically compile a solution with over 50 projects (don't ask) a couple times, but I usually only build a few projects for which I'm directly responsible and we control our versioning to facilitate better builds and assembly binding redirections for application updates.
While I still see and get over the problem you've stumbled on, following these guidelines usually helps.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thank you very very much for that. It helped tramendously.
-ZT
ZT
|
|
|
|
|
I'm running the following code, and have run into yet another misshap.
shellFolder is a valid COM object constructed by the ParentInterfacePointer from SHBindToParent. I know it's valid as it returns pointers via other functions, however, this function returns nothing.
The relativePIDL is the value returned from SHBindToParent.
Every time I run this method, mySTRRET is still null (well, IntPtr.zero).
<br />
mySTRRET = new IntPtr();<br />
result = shellFolder.GetDisplayNameOf(relativePIDL,SHGDN_Flags.SHGDN_NORMAL,out mySTRRET);<br />
The method is defined almost identicaly as the one in the tutorial (http://www.codeproject.com/csharp/csdoesshell1.asp), but I'm looking for a ptr to mySTRRET (I don't want the object, i want to forward it to another function):
<br />
int GetDisplayNameOf( <br />
IntPtr pidl,<br />
SHGDN_Flags uFlags,<br />
out IntPtr pName);<br />
This is bothering me because as far as I can see it is set up properly, and it also runs without exception.
Any ideas?
Cata
|
|
|
|
|
The Catalyst wrote:
mySTRRET = new IntPtr();
result = shellFolder.GetDisplayNameOf(relativePIDL,SHGDN_Flags.SHGDN_NORMAL,out mySTRRET);
STRRET is a structure, look it up in MSDN, you will need to define this, you can't just declare an IntPtr in it's place.
- Nick Parker My Blog
|
|
|
|
|
Ah yes...
I get it now.
Cheers
Cata
|
|
|
|
|
Here's a puzzle. I intend to send an image (jpeg) to a PHP-Driven website via HTTP POST, using a C# app compiled for the .NET Compact Framework.
So far Its all working apart from one thing, when sending the file, it is created on the server, but is corrupt. I'm positive this is down to the image not being sent in the correct format, but what format is it supposed to be sent?
The method of sending is using a WebRequest object and its RequestStream.
Method = "POST";
ContentType = "multipart/form-data; boundary=AaB03x";
The following HTTP post is sent through the stream.
--AaB03x
Content-Disposition: form-data; name="title"
Content-Type: text/plain; charset=utf-8
Title
--AaB03x
Content-Disposition: attachment; name="file" filename="nexi0001.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
contents of file...
--AaB03x--
Now alls I need to do is send the image data with this. Yet I've no idea in what format to send it and thus how to prepare this format on the CF.
Ideas?
Jonathan 'nonny' Newman
blog.nonny.com [^]
|
|
|
|
|
I think you have to send it in Base64 format. For the beginning check ToBase64Transform class.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
I can't seem to be able to use that class in the Compact Framework, would Convert.ToBase64CharArray() work do you think?
Jonathan 'nonny' Newman
blog.nonny.com [^]
|
|
|
|
|
Jonny Newman wrote:
would Convert.ToBase64CharArray() work do you think?
I think no problem with that. You have to tranform to base64. No matter with which function.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
Is System.Net.WebClient.UploadFile method available in CF?
|
|
|
|
|
Hi ,
I am currently building a simple serial terminal program. I have used text boxes to view send and received data. But everytime the text boxes get updated, they scroll upto the top most position. This is very annoying because I need to scroll down every time something new is received.
Could someone please tell me how to make the text boxes scroll automatically? Or am I better off making my own text box control? If so where can I find more info on how to do that?
Cheers
-Chad
ZT
|
|
|
|
|
Hiya I have a data entry form with a grid control. I want to add a new row to the data grid with the customer details after every entry.
The only way I can do it at the moment is to set up a class of properities and call datagrid.DataSource = aCustomerDetails each time. I think this might be expensive on system resources calling this for every entry.(remember, there could be 100 or 1000's of entries!!)
Is there an easy way to add a new row to the datagrid each time??
Thanks.
|
|
|
|
|
You have to add a row to your dataset which is datasource of your datagrid, then it automaticlly added to your datagrid too.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
I'm using C# and drying to develop a custom TextBox control. Currently I am simply trying to draw with blue instead of black. I've overriddent the OnPaint method and as long as the TextBox does not have the focus it draws the text in blue as i want it to; however, once you click inside of the edit box, my custom drawing routine no longer gets used. If you then force a repaint (i.e. minimize and then maximize) my code is once again used for the redraw. How do I get the control to use my drawing routine while it has the focus and the user is typing in it? Here is the code I have right now:
#region Custom Drawing Code <br />
protected override void OnPaint( PaintEventArgs pe ) <br />
{ <br />
Brush b = new SolidBrush( Color.Aqua ); <br />
Font f = new Font( "Arial", 12); <br />
<br />
pe.Graphics.DrawString( Text, Font, b, 0, 0 ); <br />
} <br />
#endregion
|
|
|
|
|
To do a custom textbox is alot of work, perhaps the RichTextBox can serve u better. Also inheriting from a TextBox wont work, TextBox relies on too much PInvoked code, hence much stuff cant be overriden in the usual fashion.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|