客户端 - 服务器程序:从客户端向服务器发送字符串并接收响应

时间:2013-09-12 10:15:52

标签: c# client-server

我尝试创建自己的客户端 - 服务器程序,我想做的是cliect将连接到服务器并发送一个简单的字符串,服务器需要用这个字符串做一些操作并用新字符串响应cliect。

我找到了这篇文章:http://www.daniweb.com/software-development/csharp/threads/69900/socket-programming

它似乎工作正常,我可以发送一个字符串到服务器但我怎么能回应从服务器到客户端? (我是新开发者......)

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

作为服务器,只需写回你从同一个NetworkStream读取字符串!在客户端 - 没有什么不同 - 阅读你刚刚写完字符串的NetworkStream

您的NetworkStream个对象应该只是双向工作;)