0

私は自分のクライアント - サーバー プログラムを作成しようとしています。私がやりたいことは、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);
        }
    }
}
4

1 に答える 1

0

NetworkStreamサーバーとして、文字列を読み取ったのとまったく同じ場所に書き戻すだけです! NetworkStreamクライアント側では、文字列を書き込んだばかりのファイルから読み取ります。

あなたのNetworkStreamオブジェクトは単純に両方向に動作するはずです ;)

于 2013-09-12T10:21:54.437 に答える