向各位大虾求教:
现有一台已经定义好协议的服务器,只能发送HTTP的数据来请求操作(下面代码加粗部分),如果保持这个会话呢?代码:class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];
string input, stringData;
int iPort = 8102; IPHostEntry host = Dns.GetHostByAddress("192.168.0.199");
IPAddress ip = host.AddressList[0]; IPEndPoint ipEnd = new IPEndPoint(ip, iPort);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//使用tcp协议 stream类型
try
{
socket.Connect(ipEnd);
}
catch (SocketException ex)
{
throw ex;
}
StringBuilder buf = new StringBuilder();
buf.Append(
"POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\nPragma: REQ_FRM_LOGIN\r\nAccept: text/html, */*\r\nContent-Length: 253\r\n\r\n"); buf.Append("<?xml version='1.0' encoding='GBK'?><MBOP><CID>REQ_FRM_LOGIN</CID><CST>0</CST><TID>1</TID><SID></SID><V>1.1</V><APad>6F26DE5FEC2D24169A4D3037377F1F43</APad><ER></ER><SCT><CT>0</CT><EID>10000</EID><UN>pingall1</UN><PWD>BgAAAKf4F3+URbu6</PWD></SCT></MBOP>");
byte[] ms = System.Text.UTF8Encoding.UTF8.GetBytes(buf.ToString()); socket.Send(ms,ms.Length,0); int recv = -1;
do
{
recv = socket.Receive(data);
stringData = Encoding.UTF8.GetString(data, 0, recv);
Console.Write(stringData); } while (recv != -1);//TODO: 无法退出
Console.Write("disconnect from server");
socket.Shutdown(SocketShutdown.Both);
socket.Close();
} }
现有一台已经定义好协议的服务器,只能发送HTTP的数据来请求操作(下面代码加粗部分),如果保持这个会话呢?代码:class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];
string input, stringData;
int iPort = 8102; IPHostEntry host = Dns.GetHostByAddress("192.168.0.199");
IPAddress ip = host.AddressList[0]; IPEndPoint ipEnd = new IPEndPoint(ip, iPort);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//使用tcp协议 stream类型
try
{
socket.Connect(ipEnd);
}
catch (SocketException ex)
{
throw ex;
}
StringBuilder buf = new StringBuilder();
buf.Append(
"POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\nPragma: REQ_FRM_LOGIN\r\nAccept: text/html, */*\r\nContent-Length: 253\r\n\r\n"); buf.Append("<?xml version='1.0' encoding='GBK'?><MBOP><CID>REQ_FRM_LOGIN</CID><CST>0</CST><TID>1</TID><SID></SID><V>1.1</V><APad>6F26DE5FEC2D24169A4D3037377F1F43</APad><ER></ER><SCT><CT>0</CT><EID>10000</EID><UN>pingall1</UN><PWD>BgAAAKf4F3+URbu6</PWD></SCT></MBOP>");
byte[] ms = System.Text.UTF8Encoding.UTF8.GetBytes(buf.ToString()); socket.Send(ms,ms.Length,0); int recv = -1;
do
{
recv = socket.Receive(data);
stringData = Encoding.UTF8.GetString(data, 0, recv);
Console.Write(stringData); } while (recv != -1);//TODO: 无法退出
Console.Write("disconnect from server");
socket.Shutdown(SocketShutdown.Both);
socket.Close();
} }
这个是发送的数据,如何保持这个会话了?小弟刚做网络编程,向各位请教一下
buf.Append("<?xml version='1.0' encoding='GBK'?><MBOP><CID>REQ_FRM_LOGIN</CID><CST>0</CST><TID>1</TID><SID></SID><V>1.1</V><APad>6F26DE5FEC2D24169A4D3037377F1F43</APad><ER></ER><SCT><CT>0</CT><EID>10000</EID><UN>pingall1</UN><PWD>BgAAAKf4F3+URbu6</PWD></SCT></MBOP>");
如果服务器返回的HTTP Head中有 Set-Cookie: 指令那么你在接下来的HTTP请求的Head中都必须带上这个 Cookie.这样才能保持session
1. Head头中加了一个自定义的参数: Pragma: REQ_FRM_LOGIN,
在HttpWebRequest中只有
req.Method = "POST";
req.ContentType = "text/html";
req.ContentLength = bs.Length; .....不能参加这个自定义的参数.
public static void TestWebRequest()
{
byte[] data = new byte[1024];
string inputData, OutputData;
inputData =
"<?xml version='1.0' encoding='GBK'?><MBOP><CID>REQ_FRM_LOGIN</CID><CST>0</CST><TID>1</TID><SID></SID><V>1.1</V><APad>6F26DE5FEC2D24169A4D3037377F1F43</APad><ER></ER><SCT><CT>0</CT><EID>10000</EID><UN>pingall1</UN><PWD>BgAAAKf4F3+URbu6</PWD></SCT></MBOP>";
byte[] bs = Encoding.ASCII.GetBytes(inputData); HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("http://192.168.0.199:8102");
req.Method = "POST";
req.ContentType = "text/html";
req.ContentLength = 253;
// Pragma: REQ_FRM_LOGIN如何设置?
try
{
Stream reqstream = req.GetRequestStream();
reqstream.Write(bs,0,bs.Length);
WebResponse wr = req.GetResponse();
}
catch (Exception ex)
{
throw ex;
} }
要学会查msdn啊。现在模拟Http请求,基本都用HttpWebRequest,要么用WebClient。http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.headers(VS.80).aspx