<?xml version="1.0" encoding="GB2312"?>
<RESPONSE>
<PAGESIZE>000385</PAGESIZE>
<HEADER>
<COMMAND>LOGIN</COMMAND><QUERYID>9</QUERYID></HEADER>
<BODY>
<STATE>1</STATE><ROLE>12345678,cv2334545</ROLE><LOGINID>1204</LOGINID><CONFIG_VER>1</CONFIG_VER><NEEDDOWN>1</NEEDDOWN><CONFIGINFO>初始企业配置,调试</CONFIGINFO><QUESTIION>-1</QUESTIION><CBCJ>-1</CBCJ></BODY>
</RESPONSE>
这个就是socket 传过来的字符 其中pagesize 就是包的大小,我在接收的时候如何先读出这个值从而知道 要接收包的大小(BufferLength)再进行接收。
byte[] InBuffer = new byte[BufferLength];
string bts = "";
while (Client.GetStream().DataAvailable)
{
Client.GetStream().Read(InBuffer, 0, BufferLength);
bts += System.Text.Encoding.Default.GetString(InBuffer, 0, BufferLength);
}
<RESPONSE>
<PAGESIZE>000385</PAGESIZE>
<HEADER>
<COMMAND>LOGIN</COMMAND><QUERYID>9</QUERYID></HEADER>
<BODY>
<STATE>1</STATE><ROLE>12345678,cv2334545</ROLE><LOGINID>1204</LOGINID><CONFIG_VER>1</CONFIG_VER><NEEDDOWN>1</NEEDDOWN><CONFIGINFO>初始企业配置,调试</CONFIGINFO><QUESTIION>-1</QUESTIION><CBCJ>-1</CBCJ></BODY>
</RESPONSE>
这个就是socket 传过来的字符 其中pagesize 就是包的大小,我在接收的时候如何先读出这个值从而知道 要接收包的大小(BufferLength)再进行接收。
byte[] InBuffer = new byte[BufferLength];
string bts = "";
while (Client.GetStream().DataAvailable)
{
Client.GetStream().Read(InBuffer, 0, BufferLength);
bts += System.Text.Encoding.Default.GetString(InBuffer, 0, BufferLength);
}
解决方案 »
- DEV的GridView控件
- 在VS2005里为什么我不能把控件拖到Web窗体的任意地方?
- √*︻$▅▆▇◤ 29分捉拿高手!关于C#下PING域名的别名
- 同样环境下获取cookie的有的行有的不行?
- 判断重复的问题, 我想了n久?求答!
- 谁知道能样采集输入的声音呀!!比如说耳机中的
- 100分寻求Web页面如何控制文本框的文本输入长度
- 对listview控件的SelectedIndexChanged事件编程,更换选项时,出错!!!,怎么回事???
- 请教:关于对象的远程化操作
- 能不能用Switch..case来case(选择不等式)的项,它能不能比较不等式呢
- winfrom文件上传
- dataset读取xml文件时记录为0个,那位大哥帮忙解决一下阿,多谢啦
就算要加PAGESIZE 也是加在你要传送的bytes[] 前两位
就跟POP3协议或者SMTP协议一样
public XmppSeverConnection(Socket sock) : this()
{
m_Sock = sock;
m_Sock.BeginReceive(buffer, 0, BUFFERSIZE, 0, new AsyncCallback(ReadCallback), null);
}public void ReadCallback(IAsyncResult ar)
{
// Retrieve the state object and the handler socket
// from the asynchronous state object // Read data from the client socket.
int bytesRead = m_Sock.EndReceive(ar); if (bytesRead > 0)
{
streamParser.Push(buffer, 0, bytesRead);
// Not all data received. Get more.
m_Sock.BeginReceive(buffer, 0, BUFFERSIZE, 0, new AsyncCallback(ReadCallback), null);
}
else
{
m_Sock.Shutdown(SocketShutdown.Both);
m_Sock.Close();
}
}
然后在根据buffer[0]的大小取出数据
只要你读到一个'\0'就说明一个完整的xml数据已经接受完毕方法2 : 在xml的数据段之前加一个 数据头 ,你知道http1.1协议在请求头有Content-Length字段,它能告诉接受方,我的数据区里的数据有多少个字节,接受方在接受完请求头之后,就按那个字节数收取一个完整xml内容。如果楼主的方案已经不能改了,那就比较麻烦,用一个正则表达式匹配<PAGESIZE>数字</PAGESIZE>吧