C# で XML ファイルを使用して、サーバーからクライアントに DataTable を送信したいと考えています。サーバー側で次のコードを使用しました
DataSet ds = new DataSet();
ds.WriteXml(nw, XmlWriteMode.WriteSchema);
ここで、nw はサーバーの NetworkStream です
次のコードはクライアント側にあります
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];
}
すべての catch ブロックと必要な変数が宣言されていると仮定します..返信してください..