tags:

views:

107

answers:

4

I am running both client and server on the same machine. Does any 1 know the error stated above?

server

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net.Sockets; using System.IO; using System.Net;

namespace Server { public partial class Server : Form {

    private Socket connection;
    private Thread readThread;

    private NetworkStream socketStream;
    private BinaryWriter writer;
    private BinaryReader reader;


    //default constructor

    public Server()
    {
        InitializeComponent();


        //create a new thread from server
        readThread = new Thread(new ThreadStart(RunServer));
        readThread.Start();

    }


    protected void Server_Closing(object sender, CancelEventArgs e)
    {
        System.Environment.Exit(System.Environment.ExitCode);
    }

    //sends the text typed at the server to the client
    protected void inputText_KeyDown(object sender, KeyEventArgs e)
    {

        // send the text to client
        try
        {
            if (e.KeyCode == Keys.Enter && connection != null)
            {
                writer.Write("Server>>> " + inputText.Text);

                displayText.Text +=
                    "\r\nSERVER>>> " + inputText.Text;

                //if user at server enter terminate
                //disconnect the connection to the client
                if (inputText.Text == "TERMINATE")
                    connection.Close();

                inputText.Clear();
            }
        }
        catch (SocketException)
        {
            displayText.Text += "\nError writing object";
        }
    }//inputTextBox_KeyDown

    // allow client to connect & display the text it sends
    public void RunServer()
    {
       TcpListener listener;

        int counter = 1;

        //wait for a client connection & display the text client sends
        try
        {
            //step 1: create TcpListener


            IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];

            TcpListener tcplistener = new TcpListener(ipAddress, 9000);


            //step 2: TcpListener waits for connection request
            tcplistener.Start();
            //step 3: establish connection upon client request
            while (true)
            {
                displayText.Text = "waiting for connection\r\n";

                // accept incoming connection
                connection = tcplistener.AcceptSocket();

                //create NetworkStream object associated with socket
                socketStream = new NetworkStream(connection);

                //create objects for transferring data across stream
                writer = new BinaryWriter(socketStream);
                reader = new BinaryReader(socketStream);

                displayText.Text += "Connection " + counter + " received.\r\n ";


                //inform client connection was successful
                writer.Write("SERVER>>> Connection successful");
                inputText.ReadOnly = false;
                string theReply = "";

                // step 4: read string data sent from client
                do
                {
                    try
                    {
                        //read the string sent to the server
                        theReply = reader.ReadString();

                        // display the message
                        displayText.Text += "\r\n" + theReply;
                    }

                // handle the exception if error reading data
                    catch (Exception)
                    {
                        break;
                    }

                } while (theReply != "CLIENT>>> TERMINATE" && connection.Connected);

                displayText.Text +=
                    "\r\nUser terminated connection";

                // step 5: close connection
                inputText.ReadOnly = true;
                writer.Close();
                reader.Close();
                socketStream.Close();
                connection.Close();

                ++counter;
            }
        } //end try

        catch (Exception error)
        {
            MessageBox.Show(error.ToString());
        }

    }

}// end method runserver

}// end class server

Client

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net.Sockets; using System.IO; using System.Net;

namespace Client { public partial class Client : Form { private NetworkStream output; private BinaryWriter writer; private BinaryReader reader;

    private string message = "";
    private Thread readThread;


    //default constructor
    public Client()
    {
        InitializeComponent();

        readThread = new Thread(new ThreadStart(RunClient));
        readThread.Start();
    }



    protected void Client_Closing(
        object sender, CancelEventArgs e)
    {
        System.Environment.Exit(System.Environment.ExitCode);
    }

    //sends the text user typed to server
    protected void inputText_KeyDown(
        object sender, KeyEventArgs e)
    {

        try
        {
            if (e.KeyCode == Keys.Enter)
            {
                writer.Write("CLIENT>>> " + inputText.Text);

                displayText.Text +=
                    "\r\nCLIENT>>> " + inputText.Text;

                inputText.Clear();
            }
        }
        catch (SocketException ioe)
        {
            displayText.Text += "\nError writing object";
        }
    }//end method inputText_KeyDown

    //connect to server & display server-generated text
    public void RunClient()
    {
        TcpClient client;

        //instantiate TcpClient for sending data to server
        try
        {
            displayText.Text += "Attempting connection\r\n";

            //step1: create TcpClient for sending data to server

            client = new TcpClient();
            client.Connect("localhost", 9000);



            //step2: get NetworkStream associated with TcpClient
            output = client.GetStream();

            //create objects for writing & reading across stream
            writer = new BinaryWriter(output);
            reader = new BinaryReader(output);

            displayText.Text += "\r\nGot I/O streams\r\n";

            inputText.ReadOnly = false;

            //loop until server terminate
            do
            {
                //step3: processing phase
                try
                {
                    //read from server
                    message = reader.ReadString();
                    displayText.Text += "\r\n" + message;

                }

                //handle exception if error in reading server data
                catch (Exception)
                {
                    System.Environment.Exit(System.Environment.ExitCode);
                }
            } while (message != "SERVER>>> TERMINATE");

            displayText.Text += "\r\nClosing connection.\r\n";

            //step4: close connection
            writer.Close();
            reader.Close();
            output.Close();
            client.Close();
            Application.Exit();
        }
        catch (Exception error)
        {
            MessageBox.Show(error.ToString());
        }

    }
}

}

A: 

It is probably your firewall acting up. Try connecting to something like www.google.com on TCP 80 just to see if you can actually connect.

Goyuix
Typically a firewall will filter packets, not actively refuse them.
nullptr
i have turn off the firewall and enable port 9000
mk
A: 

Are you using a newer version of Windows? It's possible that you're only listening on IPv4, but "localhost" is resolving to an IPv6 address and it's not finding it. Try connecting to "127.0.0.1" instead of localhost and see if the result changes.

nullptr
i am using window XP. i have change to 127.0.0.1 but nothing seems to change
mk
Do you see any results from the following command? netstat -na | findstr 9000
nullptr
no its the same
mk
A: 

mk, I'd tcplistener/tcpclient for simple applications . . . TheEruditeTroglodyte

TheEruditeTroglodyte
I needa use mine as GUI is a must
mk
A: 

If you use that constructor with TCPListener then it will let the underlying service provider pick a network address, which probably won't be 'localhost'. You're probably listening on your LAN/WLAN card instead of localhost.

Take a look at the MSDN page for TCPListener, the sample there shows how to use a different constructor, look at the other constructors for more samples.

Here's one way:

IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
TcpListener tcpListener =  new TcpListener(ipAddress, 9000);
Timothy Walters
sorry i kinda noob here, where do i declare the IPaddress?i have error saying that dns is not found in current context
mk
Dns is in the System.Net namespace, so just add "using System.Net;" to your code and it should work.
Timothy Walters
Ok when i debug its error free but i still having the problem of socket excpetion
mk
I have edit the code above
mk