C#의 XML 파일을 사용하여 서버에서 클라이언트로 DataTable을 보내려고합니다. 나는 서버 측에 다음 코드를 사용했습니다 NW이 서버C#의 DataSet 및 NetworkStream
에는 NetworkStream과 코드를 다음은 클라이언트 측에있다
DataSet ds = new DataSet();
ds.WriteXml(nw, XmlWriteMode.WriteSchema);
DataSet ds = new DataSet();
ds.ReadXml(clientSockStream, XmlReadMode.ReadSchema);
서버가 보내는 데이터를하지만 클라이언트 측 프로그램에서 중지됩니다. 서버 측 :
tcpserver = new TcpListener(IPAddress.Any, 4444);
tcpserver.Start();
Socket serverSocket = tcpserver.AcceptSocket(); // accepting connection
if (serverSocket.Connected)
{
serversockstream = new NetworkStream(serverSocket);
serverStreamReader = new StreamReader(serversockstream);
serverStreamWriter = new StreamWriter(serversockstream);
handleClinet client = new handleClinet();
client.startClient(serverStreamReader, serversockstream,serverStreamWriter);
}
public void startClient(StreamReader streamReader, NetworkStream ser, StreamWriter streamWriter)
{
this.sread = streamReader;
this.swrite = streamWriter;
this.nwstram = ser;
Thread ctThread = new Thread(handleClients);
ctThread.Start();
}
private void handleClients()
{
// Creating Dummy DataTable to send to Client...
DataSet ds = new DataSet();
DataTable d = new DataTable();
d.Columns.Add("Name");
d.Columns.Add("City");
d.Rows.Add("John","USA");
ds.Tables.Add(d);
try
{
while ((true))
{
String mystr = sread.ReadLine();
if (mystr.Equals("sendTable"))
break;
}
swrite.WriteLine("done");
swrite.Flush();
if(nwstram.CanWrite)
{
MessageBox.Show("it can write...");
ds.WriteXml(nwstram, XmlWriteMode.IgnoreSchema);
}
nwstram.Flush();
MessageBox.Show("XML Sent");
}
클라이언트 측 :
tcpClient = new TcpClient("127.0.0.1", 4444);
IPHostEntry ip = Dns.GetHostEntry("127.0.0.1");
//get a network stream from server
clientSockStream = tcpClient.GetStream();
clientStreamReader = new StreamReader(clientSockStream);
clientStreamWriter = new StreamWriter(clientSockStream);
private void button2_Click(object sender, EventArgs e)
{
try
{
clientStreamWriter.WriteLine("sendTable");
clientStreamWriter.Flush();
DataSet ds = new DataSet();
String str = "";
while (true)
{
str = clientStreamReader.ReadLine();
if (str.Equals("done"))
break;
}
//MessageBox.Show("Client :" + str);
if (clientSockStream.CanRead)
{
ds.ReadXml(clientSockStream, XmlReadMode.IgnoreSchema);
}
}
dataGridView1.DataSource = ds.Tables[0];
}
이
어떤 오류가 발생합니까? – SLaks
스택 추적을 포함하면 도움이됩니다 – AntLaC
스키마를 보내려고 하시겠습니까? 아니면 실제로 전체 데이터 세트를 보내시겠습니까? 네트워크 스트림을 어떻게 설정합니까? XML을 읽기 전에 전체 스트림에서 읽고 있습니까? – iMortalitySX