Click here to Skip to main content
15,897,291 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
private void tcp_fun()
{
File_Location = "D:\\project\\test\\tcp.txt";
TcpListener server = null;
try
{
// Set the TcpListener on port 4555.
******************************************************************************
**********************************************
**********************************************
**********************************************

i wont to make the port =80
and the IPAddress =255.255.255.255
to get all the http sockets
is it right to do so?
and int the exception i got
---------------------------------------


SocketException: {0}System.Net.Sockets.SocketException (0x80004005): The requested address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.TcpListener.Start(Int32 backlog)
at System.Net.Sockets.TcpListener.Start()
at WindowsFormsApplication1.app.tcp_fun() in D:\project\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 60



--------------------------------------
**********************************************
**********************************************
**********************************************
Int32 port = 4545;
IPAddress localAddr = IPAddress.Parse("127.0.0.255");

// TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);
**********************************************
**********************************************
**********************************************
******************************************************************************
// Start listening for client requests.
server.Start();

// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;

// Enter the listening loop.
while (true)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@File_Location, true))
{
file.WriteLine("Waiting for a connection... ");
}
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
//Console.WriteLine("Connected!");

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@File_Location, true))
{
file.WriteLine("Waiting for a connection... ");
}
data = null;

// Get a stream object for reading and writing
NetworkStream stream = client.GetStream();

int i;

// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);

// Console.WriteLine("Received: {0}", data);

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@File_Location, true))
{
file.WriteLine("Received: {0}" + data);
}
// Process the data sent by the client.
data = data.ToUpper();

byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

// Send back a response.
stream.Write(msg, 0, msg.Length);
// Console.WriteLine("Sent: {0}", data);

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@File_Location, true))
{
file.WriteLine("Sent: {0}" + data);

}
}

// Shutdown and end connection
client.Close();
}
}
catch (SocketException e)
{
// Console.WriteLine("SocketException: {0}", e);



using (System.IO.StreamWriter file = new System.IO.StreamWriter(@File_Location, true))
{
file.WriteLine("SocketException: {0}" + e);

}
}
finally
{
// Stop listening for new clients.
// server.Stop();
}


// Console.WriteLine("\nHit enter to continue...");
// Console.Read();
}
Posted
Comments
[no name] 23-Jul-13 15:06pm    
Uhm..... yeah.... where are you getting this 255.255.255.255 address from? Has that address been assigned to you?
Ahmad Sadeq 23-Jul-13 15:14pm    
hum
i think it's a brad cost IP to all computer in the same network
and by it i can get all the messages or the sockets .
is it right ?
Ahmad Sadeq 23-Jul-13 16:53pm    
aha ok
but what i mean is that i wont my server to listen
to all sockets or messages that received by any browser or
any program that uses port 80 (HTTP) in the PC
and get the host name which sent from
and then save that nae to a file
is it the proper why to ask so?

Int32 port = 80(http);
IPAddress localAddr = IPAddress.Parse("my pc ip address");
Ahmad Sadeq 23-Jul-13 17:03pm    
i tried to do so...


public string GetPublicIP()
{
String direction = "";
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
direction = stream.ReadToEnd();
}

//Search for the ip in the html
int first = direction.IndexOf("Address: ") + 9;
int last = direction.LastIndexOf("</body>");
direction = direction.Substring(first, last - first);

return direction;
}



and
then to pars it like
private void tcp_fun()
{
string myPublicIP = GetPublicIP();

File_Location = "D:\\project\\test\\tcp.txt";
TcpListener server = null;
try
{
// Set the TcpListener on port 80.
Int32 port = 80;
IPAddress localAddr = IPAddress.Parse(myPublicIP);


put it didn't work
thnx

1 solution

What you are asking for is a reserved, invalid address. The broadcast address for a subnet is 255 but only in the last octet. Meaning the broadcast address for 192.168.0.0/24 is usually 192.168.0.255. But that is only for default configurations and by convention. It can be overridden by the network configuration but the local machine should know about it if either statically defined or it is handed down by a DHCP server. (All of this is IPv4 or course... IPv6 is TOTALLY different.) I haven't checked to get the broadcast address in .net before but it is probably exposed somewhere in the network namespace.

However, your question about getting all the ports make me not sure you grasp the concept of ports. Binding to port 80 on the broadcast address will only get you messages broadcast to port 80 on the broadcast IP. It doesn't magically enable some sort of promiscuous mode that will give you all of the packets sent to any port on the broadcast address. Indeed, I'm not sure you can, at layer 7 (the app level) actually get packets sent to other ports than your application has bound to... that sort of defeats the purpose of ports.

I'm guessing you want to create a producer/consumer setup where one (or more) machines broadcast messages and one or more listeners pick those up. You can do that by binding to the proper IP address and selecting a port to use but you should probably pick a port above 10000 and stay away from the well known ports.

You could probably find some useful information if you look up multicasting in .Net. It allows clients to find servers then subscribe to a data stream.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900