C# 服务器程序赢得';不要从流中读取数据

C# 服务器程序赢得';不要从流中读取数据,c#,tcpclient,tcplistener,C#,Tcpclient,Tcplistener,我目前正在尝试编写TCP客户机/服务器应用程序。我觉得我的工作做得很差,因为我对C#(来自Java)这方面相当陌生 我的客户有以下代码: public static void SendPlejeFamilieObjekt(PlejeFamilie pfamilie) { try { InitConnection(); if (_isConnected) {

我目前正在尝试编写TCP客户机/服务器应用程序。我觉得我的工作做得很差,因为我对C#(来自Java)这方面相当陌生

我的客户有以下代码:

    public static void SendPlejeFamilieObjekt(PlejeFamilie pfamilie)
    {
        try
        {
            InitConnection();
            if (_isConnected)
            {
                _sWriter.WriteLine("SEND_PLEJEFAMILIE");

                if (_sReader.ReadLine().Equals("AUTH_GIVEN"))
                {
                    #region Send Plejefamilie Objekt
                    _sWriter.WriteLine(pfamilie.CPRKvinde);
                    _sWriter.WriteLine(pfamilie.CPRMand);
                    _sWriter.WriteLine(pfamilie.NavnKvinde);
                    _sWriter.WriteLine(pfamilie.NavnMand);
                    _sWriter.WriteLine(pfamilie.Addresse);
                    _sWriter.WriteLine(pfamilie.MobilKvinde);
                    _sWriter.WriteLine(pfamilie.MobilMand);
                    _sWriter.WriteLine(pfamilie.HjemmeTelefon);
                    _sWriter.WriteLine(pfamilie.StillingKvinde);
                    _sWriter.WriteLine(pfamilie.StillingMand);
                    _sWriter.WriteLine(pfamilie.EmailKvinde);
                    _sWriter.WriteLine(pfamilie.EmailMand);
                    _sWriter.WriteLine(pfamilie.EmailFaelles);
                    _sWriter.WriteLine(pfamilie.GodkendtDato.ToShortDateString());
                    _sWriter.WriteLine(pfamilie.PlejeForaeldreUdd);
                    _sWriter.WriteLine(pfamilie.AntalKurserIAar);
                    _sWriter.WriteLine(pfamilie.AntalBoernGodkendt);
                    _sWriter.WriteLine(pfamilie.Vilkaar);
                    _sWriter.WriteLine(pfamilie.Status);
                    #endregion Send Plejefamilie Objekt
                }
            }
        }
        finally
        {
            EndConnection();
        }
    }
它的作用一直到发送“SEND_PLEJEFAMILIE”。我已经通过打印到控制台进行了检查

现在,在我的服务器代码中,它如下所示:

    private static void HandleClient(object obj)
    {
        TcpClient client = (TcpClient)obj;
        Console.WriteLine("Handling client: {0}", client.Client.LocalEndPoint.ToString());
        StreamWriter sWriter = new StreamWriter(client.GetStream(), Encoding.ASCII);
        StreamReader sReader = new StreamReader(client.GetStream(), Encoding.ASCII);
        Console.WriteLine("Streams Acquired");
        bool bClientConnected = client.Connected;
        Console.WriteLine("bClientConnected {0}", bClientConnected.ToString());
        String sData = sReader.ReadLine();
        List<String> list;
        List<Note> nList;
        List<Note> nList2;
        while (bClientConnected)
        {
            Console.WriteLine(sData);
            switch (sData)
            {
                #region Modtag Plejefamilie
                case "SEND_PLEJEFAMILIE":
                    Console.WriteLine("Receiving PlejeFamilie");
                    sWriter.WriteLine("AUTH_GIVEN");
                    sWriter.Flush();
                    Console.WriteLine("AUTH_GIVEN");
                    list = new List<String>();
                    while (!(sData = sReader.ReadLine()).Equals("END"))
                    {
                        list.Add(sData);
                    }
                    ServerPlejeFamilie spf = new ServerPlejeFamilie();
                    spf.Info = list;
                    pfStack.Push(spf);
                    Console.WriteLine("Received {0}", spf.Info[0]);
                    break;
服务器代码:

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

namespace Smart_Journal_Server
{
    class Program
    {
        private static TcpListener _server;
        private static bool _isRunning;
        private static int port;
        private static Stack<ServerPlejeFamilie> pfStack = new Stack<ServerPlejeFamilie>();
        private static Stack<ServerPlejeBarn> pbStack = new Stack<ServerPlejeBarn>();
        private static Stack<ServerBiologiskFamilie> bfStack = new Stack<ServerBiologiskFamilie>();
        private static Stack<Request> rStack = new Stack<Request>();

        static void Main(string[] args)
        {
            args = new string[1];
            args[0] = "8888";
            if (args.Length == 0)
            {
                return;
            }
            else
            {
                port = Convert.ToInt32(args[0]);
            }
            Console.WriteLine("Booting up Server with port number {0}...", port);
            _server = new TcpListener(IPAddress.Any, port);
            Console.WriteLine("IP Address Assigned: {0}", IPAddress.Parse(((IPEndPoint)_server.LocalEndpoint).Address.ToString()));
            _server.Start();
            Console.WriteLine("Server Successfully Started");

            _isRunning = true;

            Thread t = new Thread(new ParameterizedThreadStart(SendToDataBase));
            Thread t1 = new Thread(new ParameterizedThreadStart(RetrieveFromDataBase));
            t.Start();
            Console.WriteLine("Ready to write data to the Database");
            t1.Start();
            Console.WriteLine("Ready to read data from the Database");
            LoopClients();
        }

        private static void SendToDataBase(object obj)
        {
            while (_isRunning)
            {
                if (pfStack.Count > 0)
                {
                    ServerPlejeFamilie pfobj = pfStack.Pop();
                    Console.WriteLine("Popping PlejeFamilieObject: {0}", pfobj.Info[0] + "," + pfobj.Info[1]);
                }

                if (pbStack.Count > 0)
                {
                    ServerPlejeBarn pbobj = pbStack.Pop();
                    Console.WriteLine("Popping PlejeBarnObject: {0}", pbobj.Info[0]);
                }

                if (bfStack.Count > 0)
                {
                    ServerBiologiskFamilie bfobj = bfStack.Pop();
                    Console.WriteLine("Popping BiologiskFamilieObject: {0}", bfobj.Info[0] + "," + bfobj.Info[1]);
                }
            }
        }

        private static void RetrieveFromDataBase(object obj)
        {
            while (_isRunning)
            {

            }
        }

        private static void LoopClients()
        {
            while (_isRunning)
            {
                //wait for client connection
                TcpClient newClient = _server.AcceptTcpClient();

                Thread t = new Thread(new ParameterizedThreadStart(HandleClient));
                t.Start(newClient);
            }
        }

        private static void HandleClient(object obj)
        {
            TcpClient client = (TcpClient)obj;
            Console.WriteLine("Handling client: {0}", client.Client.LocalEndPoint.ToString());
            StreamWriter sWriter = new StreamWriter(client.GetStream(), Encoding.ASCII);
            StreamReader sReader = new StreamReader(client.GetStream(), Encoding.ASCII);
            Console.WriteLine("Streams Acquired");
            bool bClientConnected = client.Connected;
            Console.WriteLine("bClientConnected {0}", bClientConnected.ToString());
            String sData = sReader.ReadLine();
            List<String> list;
            List<Note> nList;
            List<Note> nList2;
            while (bClientConnected)
            {
                Console.WriteLine(sData);
                switch (sData)
                {
                    #region Modtag Plejefamilie
                    case "SEND_PLEJEFAMILIE":
                        Console.WriteLine("Receiving PlejeFamilie");
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        Console.WriteLine("AUTH_GIVEN");
                        list = new List<String>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            list.Add(sData);
                        }
                        ServerPlejeFamilie spf = new ServerPlejeFamilie();
                        spf.Info = list;
                        pfStack.Push(spf);
                        Console.WriteLine("Received {0}", spf.Info[0]);
                        break;
                    #endregion Modtag Plejefamilie
                    #region Modtag Plejebarn
                    case "SEND_PLEJEBARN":
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        list = new List<String>();
                        nList = new List<Note>();
                        nList2 = new List<Note>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            if (sData.Equals("PLEJEBARN_B"))
                            {
                                do
                                {
                                    Note n = new Note();
                                    n.Dato = Convert.ToDateTime(sReader.ReadLine());
                                    n.Navn = sReader.ReadLine();
                                    n.Tekst = sReader.ReadLine();
                                    nList.Add(n);

                                    sData = sReader.ReadLine();
                                } while (!sData.Equals("END_PLEJEBARN_B"));
                            }
                            else if (sData.Equals("PLEJEBARN_TF"))
                            {
                                do
                                {
                                    Note n = new Note();
                                    n.Dato = Convert.ToDateTime(sReader.ReadLine());
                                    n.Navn = sReader.ReadLine();
                                    n.Tekst = sReader.ReadLine();
                                    nList2.Add(n);
                                    sData = sReader.ReadLine();
                                } while (!sData.Equals("END_PLEJEBARN_TF"));
                            }
                            else
                            {
                                list.Add(sData);
                            }
                        }
                        ServerPlejeBarn spb = new ServerPlejeBarn();
                        spb.Info = list;
                        spb.Bemaerkninger = nList;
                        spb.TideligereForanstaltninger = nList2;
                        pbStack.Push(spb);
                        Console.WriteLine("Received {0}", spb.Info[0]);
                        break;
                    #endregion Modtag Plejebarn
                    #region Modtag Biologisk Familie
                    case "SEND_BIOLOGISKFAMILIE":
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        list = new List<String>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            list.Add(sData);
                        }
                        ServerBiologiskFamilie sbf = new ServerBiologiskFamilie();
                        sbf.Info = list;
                        bfStack.Push(sbf);
                        Console.WriteLine("Received {0}", sbf.Info[0]);
                        break;
                    #endregion Modtag Biologisk Familie
                    default:
                        sWriter.WriteLine("NO_AUTH");
                        break;
                }
            }
            sWriter.Close();
            sReader.Close();
            client.Close();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
Net系统;
使用System.Net.Sockets;
使用系统文本;
使用系统线程;
使用System.Threading.Tasks;
命名空间智能日志服务器
{
班级计划
{
专用静态TcpListener\u服务器;
私有静态bool\u正在运行;
专用静态int端口;
私有静态堆栈pfStack=新堆栈();
私有静态堆栈pbStack=新堆栈();
私有静态堆栈bfStack=新堆栈();
私有静态堆栈rStack=新堆栈();
静态void Main(字符串[]参数)
{
args=新字符串[1];
args[0]=“8888”;
如果(args.Length==0)
{
返回;
}
其他的
{
port=Convert.ToInt32(args[0]);
}
WriteLine(“正在启动端口号为{0}…,端口号为的服务器”);
_服务器=新的TcpListener(IPAddress.Any,端口);
Console.WriteLine(“分配的IP地址:{0}”,IPAddress.Parse(((IPEndPoint)_server.LocalEndpoint.Address.ToString());
_server.Start();
Console.WriteLine(“服务器已成功启动”);
_isRunning=true;
线程t=新线程(新的参数化线程启动(SendToDataBase));
线程t1=新线程(新的参数化线程启动(从数据库中检索));
t、 Start();
WriteLine(“准备将数据写入数据库”);
t1.Start();
WriteLine(“准备从数据库读取数据”);
LoopClients();
}
私有静态void SendToDataBase(对象obj)
{
当(\u正在运行)
{
如果(pfStack.Count>0)
{
ServerPlejeFamilie pfobj=pfStack.Pop();
WriteLine(“弹出PlejeFamilieObject:{0}”,pfobj.Info[0]+,“+pfobj.Info[1]);
}
如果(pbStack.Count>0)
{
ServerPlejeBarn pbobj=pbStack.Pop();
WriteLine(“弹出PlejeBarnObject:{0}”,pbobj.Info[0]);
}
如果(bfStack.Count>0)
{
ServerBiologiskFamilie bfobj=bfStack.Pop();
WriteLine(“弹出BiologiskFamilieObject:{0}”,bfobj.Info[0]+,“+bfobj.Info[1]);
}
}
}
私有静态void RetrieveFromDataBase(对象obj)
{
当(\u正在运行)
{
}
}
私有静态void LoopClients()
{
当(\u正在运行)
{
//等待客户端连接
TcpClient newClient=_server.AcceptTcpClient();
线程t=新线程(新的参数化线程启动(HandleClient));
t、 启动(新客户端);
}
}
私有静态无效HandleClient(对象obj)
{
TcpClient client=(TcpClient)obj;
WriteLine(“处理客户端:{0}”,client.client.LocalEndPoint.ToString());
StreamWriter sWriter=新的StreamWriter(client.GetStream(),Encoding.ASCII);
StreamReader sReader=新的StreamReader(client.GetStream(),Encoding.ASCII);
控制台。WriteLine(“收购的数据流”);
bool bClientConnected=client.Connected;
WriteLine(“bClientConnected{0}”,bClientConnected.ToString());
字符串sData=sReader.ReadLine();
名单;
名单;
清单2;
while(b客户端已连接)
{
控制台写入线(sData);
交换机(sData)
{
#普列杰家族地区
案例“寄送家庭”:
控制台。写入线(“接收家庭”);
书写者的书面语(“授权”);
sWriter.Flush();
Console.WriteLine(“授权”);
列表=新列表();
而(!(sData=sReader.ReadLine()).Equals(“END”))
{
列表。添加(sData);
}
ServerPlejeFamilie spf=新的ServerPlejeFamilie();
spf.Info=列表;
pfStack.Push(spf);
WriteLine(“Received{0}”,spf.Info[0]);
打破
#endregion Modtag Plejefamilie
#区域Modtag Plejebarn
案例“SEND_PLEJEBARN”:
书写者的书面语(“授权”);
sWriter.Flush();
列表=新列表();
nList=新列表();
nList2=新列表();
而(!(sData=sReader.ReadLine()).Equals(“END”))
{
如果(数据等于(“PLEJEBARN_B”))
{
做
{
注释n=新注释();
n、 Dato=Convert.ToDateTime(sReader.ReadLine());
n、 Navn=sReader.ReadLine();
n、 Tekst=sReader.ReadLine();
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Smart_Journal_Server
{
    class Program
    {
        private static TcpListener _server;
        private static bool _isRunning;
        private static int port;
        private static Stack<ServerPlejeFamilie> pfStack = new Stack<ServerPlejeFamilie>();
        private static Stack<ServerPlejeBarn> pbStack = new Stack<ServerPlejeBarn>();
        private static Stack<ServerBiologiskFamilie> bfStack = new Stack<ServerBiologiskFamilie>();
        private static Stack<Request> rStack = new Stack<Request>();

        static void Main(string[] args)
        {
            args = new string[1];
            args[0] = "8888";
            if (args.Length == 0)
            {
                return;
            }
            else
            {
                port = Convert.ToInt32(args[0]);
            }
            Console.WriteLine("Booting up Server with port number {0}...", port);
            _server = new TcpListener(IPAddress.Any, port);
            Console.WriteLine("IP Address Assigned: {0}", IPAddress.Parse(((IPEndPoint)_server.LocalEndpoint).Address.ToString()));
            _server.Start();
            Console.WriteLine("Server Successfully Started");

            _isRunning = true;

            Thread t = new Thread(new ParameterizedThreadStart(SendToDataBase));
            Thread t1 = new Thread(new ParameterizedThreadStart(RetrieveFromDataBase));
            t.Start();
            Console.WriteLine("Ready to write data to the Database");
            t1.Start();
            Console.WriteLine("Ready to read data from the Database");
            LoopClients();
        }

        private static void SendToDataBase(object obj)
        {
            while (_isRunning)
            {
                if (pfStack.Count > 0)
                {
                    ServerPlejeFamilie pfobj = pfStack.Pop();
                    Console.WriteLine("Popping PlejeFamilieObject: {0}", pfobj.Info[0] + "," + pfobj.Info[1]);
                }

                if (pbStack.Count > 0)
                {
                    ServerPlejeBarn pbobj = pbStack.Pop();
                    Console.WriteLine("Popping PlejeBarnObject: {0}", pbobj.Info[0]);
                }

                if (bfStack.Count > 0)
                {
                    ServerBiologiskFamilie bfobj = bfStack.Pop();
                    Console.WriteLine("Popping BiologiskFamilieObject: {0}", bfobj.Info[0] + "," + bfobj.Info[1]);
                }
            }
        }

        private static void RetrieveFromDataBase(object obj)
        {
            while (_isRunning)
            {

            }
        }

        private static void LoopClients()
        {
            while (_isRunning)
            {
                //wait for client connection
                TcpClient newClient = _server.AcceptTcpClient();

                Thread t = new Thread(new ParameterizedThreadStart(HandleClient));
                t.Start(newClient);
            }
        }

        private static void HandleClient(object obj)
        {
            TcpClient client = (TcpClient)obj;
            Console.WriteLine("Handling client: {0}", client.Client.LocalEndPoint.ToString());
            StreamWriter sWriter = new StreamWriter(client.GetStream(), Encoding.ASCII);
            StreamReader sReader = new StreamReader(client.GetStream(), Encoding.ASCII);
            Console.WriteLine("Streams Acquired");
            bool bClientConnected = client.Connected;
            Console.WriteLine("bClientConnected {0}", bClientConnected.ToString());
            String sData = sReader.ReadLine();
            List<String> list;
            List<Note> nList;
            List<Note> nList2;
            while (bClientConnected)
            {
                Console.WriteLine(sData);
                switch (sData)
                {
                    #region Modtag Plejefamilie
                    case "SEND_PLEJEFAMILIE":
                        Console.WriteLine("Receiving PlejeFamilie");
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        Console.WriteLine("AUTH_GIVEN");
                        list = new List<String>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            list.Add(sData);
                        }
                        ServerPlejeFamilie spf = new ServerPlejeFamilie();
                        spf.Info = list;
                        pfStack.Push(spf);
                        Console.WriteLine("Received {0}", spf.Info[0]);
                        break;
                    #endregion Modtag Plejefamilie
                    #region Modtag Plejebarn
                    case "SEND_PLEJEBARN":
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        list = new List<String>();
                        nList = new List<Note>();
                        nList2 = new List<Note>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            if (sData.Equals("PLEJEBARN_B"))
                            {
                                do
                                {
                                    Note n = new Note();
                                    n.Dato = Convert.ToDateTime(sReader.ReadLine());
                                    n.Navn = sReader.ReadLine();
                                    n.Tekst = sReader.ReadLine();
                                    nList.Add(n);

                                    sData = sReader.ReadLine();
                                } while (!sData.Equals("END_PLEJEBARN_B"));
                            }
                            else if (sData.Equals("PLEJEBARN_TF"))
                            {
                                do
                                {
                                    Note n = new Note();
                                    n.Dato = Convert.ToDateTime(sReader.ReadLine());
                                    n.Navn = sReader.ReadLine();
                                    n.Tekst = sReader.ReadLine();
                                    nList2.Add(n);
                                    sData = sReader.ReadLine();
                                } while (!sData.Equals("END_PLEJEBARN_TF"));
                            }
                            else
                            {
                                list.Add(sData);
                            }
                        }
                        ServerPlejeBarn spb = new ServerPlejeBarn();
                        spb.Info = list;
                        spb.Bemaerkninger = nList;
                        spb.TideligereForanstaltninger = nList2;
                        pbStack.Push(spb);
                        Console.WriteLine("Received {0}", spb.Info[0]);
                        break;
                    #endregion Modtag Plejebarn
                    #region Modtag Biologisk Familie
                    case "SEND_BIOLOGISKFAMILIE":
                        sWriter.WriteLine("AUTH_GIVEN");
                        sWriter.Flush();
                        list = new List<String>();
                        while (!(sData = sReader.ReadLine()).Equals("END"))
                        {
                            list.Add(sData);
                        }
                        ServerBiologiskFamilie sbf = new ServerBiologiskFamilie();
                        sbf.Info = list;
                        bfStack.Push(sbf);
                        Console.WriteLine("Received {0}", sbf.Info[0]);
                        break;
                    #endregion Modtag Biologisk Familie
                    default:
                        sWriter.WriteLine("NO_AUTH");
                        break;
                }
            }
            sWriter.Close();
            sReader.Close();
            client.Close();
        }
    }
}