1

Flushネットワーク ストリームで操作を行っても何も起こらないことはわかっていますが、

そのため、ネットワーク ストリームをコンストラクター パラメーターとして取るものを定義し、クライアントに接続が成功したことを伝えるStreamWriter手紙を送信しようとしています。S

private StreamReader srReceiver;
private StreamWriter swSender;

// Occures when a new client is accepted
private void AcceptClient()
{
    srReceiver = new System.IO.StreamReader(TcpClient.GetStream());
    swSender = new System.IO.StreamWriter(TcpClient.GetStream());

    if (TcpClient.Available > 0)
    {
            char [] buff0 = new char[TcpClient.Available];

            // Read the account information from the client
            srReceiver.Read(buff0, 0, TcpClient.Available);

            sUserNumber = new string(buff0);

            // We got a response from the client
            if (!string.IsNullOrEmpty(sUserNumber))
            {
                OraEntities Ent = new OraEntities();

                var user = Ent.USERS.FirstOrDefault(usr => usr.USER_NUMBER == sUserNumber);

                // Check user validity
                if (user == null)
                {
                    Console.WriteLine("No user has this number: " + sUserNumber);
                    return;
                }
                else
                {
                    // Add the user to Active Users List and start listening for messages from him
                    Server.AddUser(this, sUserNumber);

                    // S means connected successfully
                    swSender.WriteLine("S");
                    swSender.Flush();

                    // Start the new tread that hosts the listener
                    thrReceive = new Thread(HandleInput);
                    thrReceive.Start();
                }
            }
            else
            {
                CloseConnection();
                return;
            }
    }
}

しかし、何も送信されていません (ランタイム例外はありません)。

私は何が欠けていますか?

4

2 に答える 2

1

これが私のテストコードで、動作していることを示しています:

サーバ:

namespace SocketTestServer
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener lis = new TcpListener(IPAddress.Parse("127.0.0.1"), 2509);
            lis.Start();
            lis.BeginAcceptTcpClient(new AsyncCallback(acceptClient), lis);
            Console.ReadKey();
        }

        private static void acceptClient(IAsyncResult ar)
        {
            TcpListener lis = ar.AsyncState as TcpListener;
            using (TcpClient cli = lis.EndAcceptTcpClient(ar))
            {
                using (NetworkStream ns = cli.GetStream())
                {
                    byte[] toSend = Encoding.ASCII.GetBytes("S\r\n");
                    ns.Write(toSend, 0, toSend.Length);
                    Console.WriteLine("Client connected");
                }
            }
        }
    }
}

クライアント:

namespace SocketTestClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (TcpClient client = new TcpClient())
            {
                client.Connect(IPAddress.Parse("127.0.0.1"), 2509);
                using (NetworkStream ns = client.GetStream())
                {
                    StreamReader sr = new StreamReader(ns);
                    Console.WriteLine(sr.ReadLine());
                    Console.ReadLine();
                }
            }

        }
    }
}

以下のスクリーンショットは、動作を示しています。

クライアント/サーバーが動作しているスクリーンショット

于 2012-05-30T12:16:26.183 に答える
0

昨日、これと同様の問題がありました。以下は、ソケットからデータを読み取り、応答を送信して閉じるという質問 です。

最後の回答ですが、2日待つ必要があるため、受け入れることができませんでした。

うまくいけば、これは役に立ちます

于 2012-05-30T12:32:04.043 に答える