我來自c + +編程背景,我已經在C++中實現了一個項目,使用xml消息發送和接收來自服務器的數據。我在c#中重寫代碼,我無法接收作爲服務器的服務器的數據無法識別xml格式,因爲它具有encoding屬性。服務器在vC++中實現,併爲其xml消息使用utf-16編碼。我只需要刪除我發送的xml消息中的encoding屬性。根據msdn論壇http://msdn.microsoft.com/en-us/library/5366y21d.aspx刪除編碼,我們必須提及編碼字段爲空以刪除屬性。但是,如果我提到第二個參數爲空,程序似乎沒有編譯。我已經提到了下面的代碼。請讓我知道如何從xml消息中刪除編碼屬性,以及編寫tcp ip客戶端以從服務器獲取數據的最佳方式。刪除xml編碼屬性
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Net.Sockets;
namespace Csharpproject.Exercises
{
class Createxml
{
static void Main()
{
int random;
Random data = new Random();
random=data.Next();
StringWriter str = new StringWriter();
XmlTextWriter xml = new XmlTextWriter(str); //XmlTextWriter(str,null)gives error
xml.WriteStartDocument();
xml.WriteStartElement("App");
xml.WriteAttributeString("version", "1.0");
xml.WriteStartElement("request");
xml.WriteElementString("MessageId",random.ToString());
xml.WriteElementString("operation","GetAgentData");
xml.WriteEndElement();
xml.WriteEndElement();
xml.WriteEndDocument();
string result = str.ToString();
// Console.WriteLine(result);
Sockconnect(result);
}
static public void Sockconnect(string Data)
{
/* creating an TCP Socket */
string Recvdata;
/* convert string to byte data */
byte[] data = Encoding.Default.GetBytes(Data);
/*buffer to receive the data */
byte[] recv=new byte[4000];
/* number of bytes sent */
int sent = 0;
/* number of bytes received */
int received = 0;
int datalen;
datalen = data.Length;
/* create socket */
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
/* connect locally */
try
{
s.Connect("127.0.0.1", 4916);
}
catch (ArgumentNullException ae)
{
Console.WriteLine("ArgumentNullException : {0}", ae.ToString());
}
catch (SocketException se)
{
Console.WriteLine("SocketException : {0}", se.ToString());
}
catch (Exception e)
{
Console.WriteLine("Unexpected exception : {0}", e.ToString());
}
Console.WriteLine("Connected successfully ");
Console.WriteLine("Sending the data ");
/* send the data */
do
{
try
{
sent += s.Send(data, sent, datalen - sent, SocketFlags.None);
}
catch (SocketException se)
{
Console.WriteLine("Unexpected exception : {0}", se.ToString());
}
} while (sent < datalen);
Console.WriteLine("Sent Successfully ");
/* receive the data */
try
{
received = s.Receive(recv, SocketFlags.None);
}
catch (SocketException se)
{
Console.WriteLine("SocketException : {0}", se.ToString());
}
Console.WriteLine("Received some data");
Recvdata = System.Text.Encoding.Default.GetString(recv);
Console.WriteLine(Recvdata);
}
}
}
好的建議,但它似乎沒有工作。我通過互聯網上的例子,他們已經執行序列化並通過套接字發送數據。我們必須在這裏做同樣的事情。我將字符串數據轉換爲字節數組並通過套接字發送。 – blitz
@blitz:'它似乎沒有工作'?是否有錯誤?如果有,錯誤信息是什麼? '它似乎沒有工作'是不是很多繼續下去。 –
抱歉沒有正確更新答覆。我想說的是,服務器仍然拒絕我通過套接字發送的xml。那麼這是以c#做事情的正確方式,還是有更好的方法去做。 – blitz