|
Sounds like a bad idea.
normally you:
- know which computer you want to address (you may want to use DNS to translate a logical
name, a URL, to a specific IP adr)
- know which port you want to use (typically each protocol has a specific port; exception
is a multi-user server typically has a connection port and provides one of many available
client ports)
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Well I'm making an inter-network Instant Messenging program. I want a user to be able to create a room, then other users can search for open rooms and connect. I'll make the port constant so they cann't screw with it.
|
|
|
|
|
OK,
I don't know how IM systems do it.
you could broadcast things on a small network, but that wouldn't scale at all.
so it seems to me you need one or more servers that know what rooms are in existence
and how to connect to them.
I would suggest you google for IM protocols; should be readily available.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
The thing is, where I primarily want to use it: there's no internet and I don't have access to the server in the room, and all the IPs are assigned by DHCP.
What I could do (albeit inefficient), is get the network IP, and subnet mask (that's the next question), and try to resolve each IP, example:
network is 192.168.1.0, subnet mask is 255.255.255.0, therefore 254 max users
try to resolve 192.168.1.1
then 192.168.1.2
If the resolve is successful, try to connect the socket.
and so on, and so forth. But I think the room's local IP is a class A address so that would be a lot of network activity.
|
|
|
|
|
Why not have one (or a few) IM servers in the network,
either store their IP addresses on every machine or do a broadcast to get one's attention,
then take it from there?
if there is no dedicated server, make that a dynamic role, assigned to the first machine
trying to enter a room, and passing it on when the machine exits (or no longer responds).
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
But there's still one problem: DHCP assigned IP's. I could store the MAC addresses of the NIC's then do a RARP to get the IP's, although I don't know how to do that either. Regarding the second paragraph: how would the first machine get the IP of the Host?
I do have the password for the Admin user but there's problems with putting a Server program onto that machine: it may not be on and I may get into trouble.
|
|
|
|
|
FYI: I haven't done this, and don't know any details, but I would expect WMI is capable
of enumerating current machines (by name I guess) in the workgroup or domain.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
|
Hi all, first time poster so i apologize in advance if my question is malformed or simply stupid, that being said, let me get on to the question itself:
I have create an application that is a context menu on folders that uses a text file in order to check if any of the words in it, appear in the folder name (I'm obviously simplifying it in order to make the question more focused).
My problem is that the file should be read every time that the application is run and it looks for it in the folder that hosts the folder I'm looking at with the context menu (for example: if I'm right clicking "c:\program files\visual studio 2008" it looks for the file at "c:\program files")
I've tried deploying it using the publish wizard in the visual studio and other methods i saw in the site (iexpress for example) but i couldnt tell the application that it will be installed to c:\program files\app for example and that it should look for the file there.
this is the code that reads the config file:
static string[] readConfigFile(string fileLocation)
{
return System.IO.File.ReadAllLines(configFileName);
}
where configFileName = "config.txt" - no path really, i've tried using ".\config.txt" and other methods to no avail - the only way to make it work is to have it read the file from a fixed location and copying it there myself - but that makes no sense since i can't ask the person who installs it to copy one file there and the other someplace else etc...
what i need is a way to tell the application to look for the file only where the application itself resides or better yet - a way to make an installer that is easily customizable.
Thanks a bunch,
Elad Katz.
|
|
|
|
|
Ok, sounds like you have a couple of questions:
- How can I read a file when my application is deployed using ClickOnce? (that's the deploy built into Visual Studio)
- How can I specify that my program be installed into program files?
The answer to the first question is, you'll need to make your config.txt be deployed with your application. Here's how: right-click on the file in Visual Studio solution explorer, click properties. From the properties window, on the Build Action drop down, select Content .
That's it. Republish your solution again, then when you go to read the file, don't specify a path. It should work.
Another way to accomplish this is to use the built-in stuff -- no reading files explicitly required. Check out application settings in Visual Studio 2005 (and 2008)[^]
To answer your second question, you'll need to build a setup program and don't use ClickOnce deployment. There are articles on this site to help you with that.
|
|
|
|
|
|
EladKatz wrote: i want the application owner to be able to add entries to the file
Then ClickOnce deployment is not what you want; ClickOnce apps are lightweight, low-impact apps that aren't installed in c:\program files or any other location that requires admin privs. Use a standard setup program instead. Creating a setup project in Visual Studio[^] For what it's worth, I don't know if you can create setup projects using Visual Studio Express editions; I believe you must have the pro edition or better.
|
|
|
|
|
Hi,
I need to get the common_documents environment and it is NOT obtainable using system.environment so I need to use CSIDL and SHGetSpecialFolderPath.
Can some one post some example code in c# on how I implement this please.
Thanks,
Glen Harvy
|
|
|
|
|
string value = Microsoft.Win32.Registry.GetValue(@"HKey_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Common Documents", null) as string;
|
|
|
|
|
Hi,
For whatever reason, this does not achieve the result I need (at least on my W2K3 server).
I need to install files into the common_documents directory so that any user can edit them (they are template type files).
The code you listed does indeed return the correct path as far as I can tell (viz c:\documents and settings\all users\documents) however if I create a sub-directory in that directory it is not being shown in the MyDocuments window.
This must have something to do with the network, profiles etc but it seems to me that I cannot achieve my goal as easily as I thought.
Thanks for your response - much appreciated.
Glen Harvy
|
|
|
|
|
Glen Harvy wrote: however if I create a sub-directory in that directory it is not being shown in the MyDocuments window.
Glen Harvy wrote: The code you listed does indeed return the correct path as far as I can tell
Ah, ok, you didn't mention that in your first post. Yeah, it may be wise to look into Win32 shell calls to have this done, but I'm not an expert in that area.
|
|
|
|
|
Try taking a look here[^].
Scott.
—In just two days, tomorrow will be yesterday.
—Hey, hey, hey. Don't be mean. We don't have to be mean because, remember, no matter where you go, there you are. - Buckaroo Banzai
[ Forum Guidelines] [ Articles] [ Blog]
|
|
|
|
|
Im on need of a way to extract an internet explorer's shortcut icon fo my favorites system in my webbrowser. Anyone know how?
|
|
|
|
|
IE favorite files are stored in [documents and settings]\[user]\Favorites\ in WindowsXP. Open that sucker up with a File.ReadAllLines call and look for a line that reads like this:
IconFile=http: Do a WebClient.DownloadFile to grab that icon from the web and you're home free.
|
|
|
|
|
could you write me an example on how to do this. Ive got the File.ReadAllLines Part but how would you search for the string representing the favicon.ico path?
|
|
|
|
|
sagedread wrote: how would you search for the string representing the favicon.ico path?
In .NET 1 and .NET 2, you'd write it like this:
string iconFilePath = "";
string iconFileLabel = "IconFile=";
foreach (string line in File.ReadAllLines(theFavoriteFilePathGoesHere))
{
if (line.StartsWith(iconFileLabel))
{
iconFilePath = line.Remove(0, iconFileLabel.Length);
break;
}
} Or if you're using the latest version of .NET, you could write this as a LINQ query:
var matchingLines = from line in File.ReadAllLines(favoriteFilePath)
let iconFileLabel = "IconFile="
where line.StartsWith(iconFileLabel)
select line.Remove(0, iconFileLabel.Length);
var iconFilePath = matchingLines.FirstOrDefault();
|
|
|
|
|
Hello,
I'm trying to pass an array of a type I've defined to unmanaged C++.
If I declare the parameter as: func (BitmapInfo* objects...
I get the error: "Cannot take the address of, get the size of, or declare a pointer to an unmanaged type." (This is even with BitmapInfo declared with the "unsafe" attribute.)
If I declare it as: func (BitmapInfo [] objects...
It compiles, but crashes with the message: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
If I try to put the address in an IntPtr:
IntPtr arrayStart = (IntPtr) (&(objects [0]));
I get the first compile error again.
How can I pass a custom array to unmanaged code? Thanks!
|
|
|
|
|
Never mind -- I solved the problem. Here's the solution in case anyone else encounters this:
The key idea is to use a struct instead of a class. The reason is that class instances are allocated in the heap, and the managed environment moves heap items around, so any pointer to a class instance may become invalid.
Structs are allocated on the stack and stay there, so it's feasible to use pointers to them.
|
|
|
|
|
For reference types (classes) you would need a GCHandle that allows you to fix the object
in memory, get its IntPtr, use it, then free it again.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
|