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 回答