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