Hi all, I've been working on a client/server program for a good while now and can't understand the online help libraries offered from the MSDN site!

I am using the Visual C# 8 Express version for .NET.

The user enters information into the client side applications and presses a send button. The message then gets sent to the server side application. The server-side application is activated when server user activates the server with a start button...

The trouble I am having is many of the functions I have found online for socket programming are deprecated and so cannot be used for my application...

I've found some other solutionsto the problem but they are presented in a way that I really don't understand!

(IPAddress ipaddr, int port)

Would anyone be able to tell me how I can send a simple string from a client application to a listening server application?

FYI, I'm developing both the client and the server applications on my local machine.

Thanks for reading, and thanks in advance for any help given!

Recommended Answers

All 4 Replies

I'm primarily a java programmer so I might have some capitalization wrong here, but it should get you started.

//connect to server and get intput/output stream
TcpClient client = new TcpClient(string ip, int port);
NetworkStream stream = client.GetStream();
 
//send a string to the server
ASCIIEncoding Enc = new ASCIIEncoding();
string s = "message";
byte[] buffer = Enc.GetBytes(s);
stream.Write(buffer, 0, buffer.Length);
stream.flush();

server

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Security.Cryptography;
using ClassLibrary1;

public class serv
{
    public static void Main()
    {

        //Establishing a connection with the client
        IPAddress ipAd = IPAddress.Parse("10.0.0.182");
        TcpListener newList = new TcpListener(ipAd, 7777);
        /* Start Listeneting at the specified port */

        newList.Start();
        Console.WriteLine("The server is running at port 7777...");
        Console.WriteLine("Waiting for a connection.....");
        Socket s = newList.AcceptSocket();
        Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);


        //Accepting the data from the client in byte form
        byte[] b = new byte[100];
        int k = s.Receive(b);
        Console.WriteLine("Recieved...");
        for (int i = 0; i < k; i++)
            //displaying the data in characters
            Console.Write(Convert.ToChar(b[i]));

        //Displaying the data in bytes
        Console.WriteLine("The byte data is");
        for (int i = 0; i < k; i++)
            Console.Write(b[i]);
        //Sending acknowlegement to the client
        ASCIIEncoding asen = new ASCIIEncoding();
        s.Send(asen.GetBytes("The string was recieved by the server."));
        Console.WriteLine("\nSent Acknowledgement");

        //Accepting data using the network streams
        NetworkStream nts = new NetworkStream(s);
        StreamReader strea = new StreamReader(nts);
        StreamWriter strwri = new StreamWriter(nts);
        string output;
        output = strea.ReadLine();
        Console.WriteLine(output);

        try
        {
            string output2;
            //Copying the contents of the file
            output2 = strea.ReadLine();
            Console.WriteLine(output2);
            string dest = ("C://Project//Copy//copy.txt");
            File.Copy(output2, dest, true);
            Console.WriteLine("The file has been copied to the new destination");

            //Getting the contents of the copied file
            Console.WriteLine();
            Console.WriteLine("The contents of the Copied file are");
            Console.WriteLine(File.ReadAllText("C://Project//Copy//copy.txt"));

            //Encrypting a file
            TripleDESCryptoServiceProvider cypto = new TripleDESCryptoServiceProvider();
            FileStream filestream = File.Create("C://Project//Copy//secret.txt");

            CryptoStream cryptoStream = new CryptoStream(filestream, cypto.CreateEncryptor(), CryptoStreamMode.Write);
            StreamWriter write = new StreamWriter(cryptoStream);
            write.WriteLine(File.ReadAllText("C://Project//Copy//copy.txt"));
            write.Close();

            filestream = File.Create("C://Project//Copy//secret.txt");
            BinaryWriter binwrite = new BinaryWriter(filestream);
            binwrite.Write(cypto.Key);
            binwrite.Write(cypto.IV);
            binwrite.Close();
            Console.WriteLine();
            Console.WriteLine("The data is encrypted and stored");
            Console.Write("The encrypted data is : ");
            Console.WriteLine(File.ReadAllText("C:\\Project\\Copy\\Secret.txt"));






        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine(e);
        }




        s.Close();





    }
}


client

using System;
using System.Collections.Generic;
using System.Text;

using System.IO;
using System.Net;

using System.Net.Sockets;


public class clnt
{

    public static void Main(string[] args)
    {

        try
        {
            //Establishing the connection 
            TcpClient tcpclnt = new TcpClient();
            Console.WriteLine("Connecting.....");
            tcpclnt.Connect("10.0.0.182", 7777); 
            Console.WriteLine("Connected");
            

            //Transfering of data in the form of bytes 
            Console.Write("Enter the string to be transmitted : ");
            String str = Console.ReadLine();
            Stream stm = tcpclnt.GetStream();
            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] ba = asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");
            stm.Write(ba, 0, ba.Length);
            byte[] bb = new byte[100];
            int k = stm.Read(bb, 0, 100);
            for (int i = 0; i < k; i++)
            Console.Write(Convert.ToChar(bb[i]));
            

            //Using the network stream to send data
            NetworkStream nts = tcpclnt.GetStream();
            StreamReader strread = new StreamReader(nts);
            StreamWriter strwrite = new StreamWriter(nts);
            //Sending a pre-stored text data
            string str1 = "goodboy";
            strwrite.WriteLine(str1);
            strwrite.Flush();

            
            
            //Transfering of the file name using the streams
            Console.WriteLine("Enter the file path");
            string str2 = Console.ReadLine();
            strwrite.WriteLine(str2);
            strwrite.Flush();









            tcpclnt.Close();

        }

        catch (Exception e)
        {
            Console.WriteLine("Error..... " + e.StackTrace);
        }
    }

}

change the ip address to ur ipaddress

Go with jacobpauls code but use one networkstream in server side and one in client side that solves the problem

thanks to all.....i will try to work on your suggestions....

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.