Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 857
  • Last Modified:

How to listen on a single IP Address?

Hi,

I try to write a window form, that can connect to a server (here: a web server) and send information to it.

But I have problems by receiving data from the server.
I could listen on every incoming address (port 80) but that would mean that also streams of the web browser I use at that moment would be received.

So I just want to receive data from one special address.

But I get an error:
The selected IP address is not valid in this context.

Is there any way to listen on single addresses?
(the server is my own at home and firewall settings are made)
class Tranmission
 {
  private IPAddress targetAddress;
  private IPEndPoint endpoint;
  public Tranmission()
  {
   targetAddress = IPAddress.Parse("213.211.224.32");
   endpoint = new IPEndPoint(targetAddress, 80);
  }
 
  public string listen()
  {
   string result = null;
   TcpListener listener = new TcpListener(endpoint);
   try
   {
    listener.Start();
    TcpClient client = listener.AcceptTcpClient();
    StreamReader inStream = new StreamReader(client.GetStream());
    result = inStream.ReadToEnd();
    client.Close();
    listener.Stop();
   }
   catch (SocketException ex)
   {
    MessageBox.Show(ex.ToString());
   }
   catch (StackOverflowException ex)
   {
    MessageBox.Show(ex.ToString());
   }
   return result;
  }
 
  public bool sendText(string text)
  {
   int i=0;
   do
   {
    try
    {
     TcpClient client = new TcpClient("www.gruenzeuch.de", 80);
     StreamWriter outStream = new StreamWriter(client.GetStream());
     outStream.WriteLine(text);
     outStream.Close();
     return true;
    }
    catch (SocketException ex)
    {
     i++;
    }
   }while(i<10);
   return false;
  }
 }

Open in new window

0
develc
Asked:
develc
  • 2
1 Solution
 
Andres PeralesCommented:
In your IIS setting you have to specifiy the IP address for that webserver to listen on...if you are using host headers this will not work...
0
 
develcAuthor Commented:
it is no Web-Application, it's a window form.
Yesterday I wrote a small listener, who listend on any address and it worked.
But that's not really what I want.
0
 
develcAuthor Commented:
After a long series of tries, I found the solution:


 public string listen(string targetIPAddress, int port)
  {
   string result = null;
   string[] target = targetIPAddress.Split('.');

   Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

   try
   {
    IPAddress address = IPAddress.Parse(targetIPAddress);
    IPEndPoint endpoint = new IPEndPoint(address, port);
    socket.Connect(endpoint);
    socket.Listen(1000);

    Socket clientSocket = socket.Accept();
    byte[] data = new byte[1024];

    int receivedLength = clientSocket.Receive(data);

    result = Encoding.UTF8.GetString(data);

    clientSocket.Close();
    socket.Close();

    return result;
   }
   catch(SocketException ex)
   {
    MessageBox.Show(ex.Message);
    return null;
   }
  }
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now