0

サーバーからクライアントにメッセージを簡単に配信する必要最小限のプログラムを構築しています。

サーバーとクライアント間の接続を正常に確立できるようになりましたが、クライアント プログラムはストリームから読み取ることができません。これが私のコードです。

サーバープログラムのコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Sockets;

namespace chat_client_console
{
    class Program
    {
        static TcpListener listener;
        static void Main(string[] args)
        {
            string name = Dns.GetHostName();
            IPAddress[] address = Dns.GetHostAddresses(name);

            /*
            foreach(IPAddress addr in address)
            {
                Console.WriteLine(addr);
            }*/
            Console.WriteLine(address[1].ToString());
            listener = new TcpListener(address[1], 2055);

            listener.Start();

            Socket soc = listener.AcceptSocket();
            Console.WriteLine("Connection successful");
            Stream s = new NetworkStream(soc);

            StreamReader sr = new StreamReader(s);
            StreamWriter sw = new StreamWriter(s);

            sw.AutoFlush = true;
            sw.Write("A test message");
            Console.WriteLine("Test message delivered. Now ending the program");

            /*
            string name = Dns.GetHostName();
            Console.WriteLine(name);
            //IPHostEntry ip = Dns.GetHostEntry(name);
            //Console.WriteLine(ip.AddressList[0].ToString());
            IPAddress[] adr=Dns.GetHostAddresses(name);
            foreach (IPAddress adress in adr)
            {
                Console.WriteLine(adress);
            }
            */
            Console.ReadLine();
        }
    }
}

これがクライアントプログラムのコードです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;

namespace chat_client_console_client
{
    class Program
    {
        static void Main(string[] args)
        {
            string display;
            TcpClient client = new TcpClient("localhost", 2055);
            Stream s = client.GetStream();
            Console.WriteLine("Connection successfully received");

            StreamWriter sw = new StreamWriter(s);
            StreamReader sr = new StreamReader(s);
            sw.AutoFlush = true;
            while (true)
            {

                display = sr.ReadLine();
                Console.WriteLine("Reading stream");
                if (display == "")
                {
                    Console.WriteLine("breaking stream");
                    break;
                }

            }

            Console.WriteLine(display);
        }
    }
}

さまざまなチェックメッセージが示すように、プログラム間の接続を正常に確立できるようになりました。サーバー プログラムは、データをストリームに正常に送信することもできます。

ただし、クライアント プログラムはストリームからデータを読み取ることができません。readline() 関数でスタックしているようです。

今、私はこの問題について何時間も壁に頭をぶつけていて、誰かが私を助けることができれば非常に感謝しています.

4

1 に答える 1

5

サーバーを見てください:

sw.AutoFlush = true;
sw.Write("A test message");

クライアントが待ち望んでいる改行を書いているわけではありません。

于 2012-09-12T16:28:35.710 に答える