locked
Can not connect with c++ socket to c#.net tcp listener RRS feed

  • Question

  • Can anybody tell me what is wrong in my code? Why it does not work?

    void CappDlg::OnBnClickedButton1()
    {
       CString msg = CString(
    "hello");
       int len = msg.GetLength();
       CSocket socket;
       socket.Create();
       CString str = CString(
    "127.0.0.1");
       if ( socket.Connect( str, 3031) )
      {
         int res = socket.Send(LPCTSTR(msg), len);
      }
    }


    My TCP Listener is made on c#.net. It works. tested width c#.net client:

    int port = 3031;
    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    listener =
    new TcpListener(ipAddress, port);
    listener.Start();
    Byte[] bytes = new Byte[512];
    String data = null;
    while (true)
    {
         TcpClient client = listener.AcceptTcpClient();
         NetworkStream stream = client.GetStream();
         stream.Read(bytes, 0, 8);
         data = Encoding.ASCII.GetString(bytes);
        Console.WriteLine(data);
        client.Close();
    }
    listener.Stop();

    Friday, November 14, 2008 1:03 PM

Answers

  • Hi,

    you must make your concept clear, that socket is the end point or entry point for the communication between two systems. You have create a socket for the client but not for the server. You must have to create a socket for server also. Also make sure that you must have to use same types of sockets on both ends. If you are using stream sockets at server side then you must have to create streams sockets at client side, it cannot be datagram UDP or any other socket. Try the following code for the server side.

                TcpListener tcpListener = new TcpListener(3031);
                tcpListener.Start();
                Console.WriteLine("Server Started");
                //Accepts a new connection...
                Socket socketForClient = tcpListener.AcceptSocket();
                //StreamWriter and StreamReader Classes for reading and writing the data to and fro.
                //The server reads the meassage sent by the Client ,converts it to upper case and sends it back to the client.
                //Lastly close all the streams.
                try
                {
                    if (socketForClient.Connected)
                    {
                        while (true)
                        {
                            Console.WriteLine("Client connected");
                            Console.ReadKey();
                            NetworkStream networkStream = new NetworkStream(socketForClient);
                            StreamWriter streamWriter = new StreamWriter(networkStream);
                            StreamReader streamReader = new StreamReader(networkStream);
                            string line = streamReader.ReadLine();
                            Console.WriteLine("Read:" + line);
                            Console.ReadKey();
                            line = line.ToUpper() + "!";
                            streamWriter.WriteLine(line);
                            Console.WriteLine("Wrote:" + line);
                            Console.ReadKey();
                            streamWriter.Flush();
                        }
                    }
                    socketForClient.Close();
                    Console.WriteLine("Exiting...");
                    Console.ReadKey();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

    --
    Regards,
    Asif

    Software Developer
    Friday, November 14, 2008 9:47 PM

All replies

  •  Use function GetLastError to check the error value if connection attempt failed.  Then look up the error code in the MSDN library to get a better clue as to why things are failing.

    • Edited by S. Verma Friday, November 14, 2008 4:28 PM CSocket returns BOOL, not error
    Friday, November 14, 2008 4:27 PM
  • Hi,

    you must make your concept clear, that socket is the end point or entry point for the communication between two systems. You have create a socket for the client but not for the server. You must have to create a socket for server also. Also make sure that you must have to use same types of sockets on both ends. If you are using stream sockets at server side then you must have to create streams sockets at client side, it cannot be datagram UDP or any other socket. Try the following code for the server side.

                TcpListener tcpListener = new TcpListener(3031);
                tcpListener.Start();
                Console.WriteLine("Server Started");
                //Accepts a new connection...
                Socket socketForClient = tcpListener.AcceptSocket();
                //StreamWriter and StreamReader Classes for reading and writing the data to and fro.
                //The server reads the meassage sent by the Client ,converts it to upper case and sends it back to the client.
                //Lastly close all the streams.
                try
                {
                    if (socketForClient.Connected)
                    {
                        while (true)
                        {
                            Console.WriteLine("Client connected");
                            Console.ReadKey();
                            NetworkStream networkStream = new NetworkStream(socketForClient);
                            StreamWriter streamWriter = new StreamWriter(networkStream);
                            StreamReader streamReader = new StreamReader(networkStream);
                            string line = streamReader.ReadLine();
                            Console.WriteLine("Read:" + line);
                            Console.ReadKey();
                            line = line.ToUpper() + "!";
                            streamWriter.WriteLine(line);
                            Console.WriteLine("Wrote:" + line);
                            Console.ReadKey();
                            streamWriter.Flush();
                        }
                    }
                    socketForClient.Close();
                    Console.WriteLine("Exiting...");
                    Console.ReadKey();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

    --
    Regards,
    Asif

    Software Developer
    Friday, November 14, 2008 9:47 PM