向各位大虾求教:
      现有一台已经定义好协议的服务器,只能发送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();
} }

解决方案 »

  1.   

    加粗在代码中就不行了?晕
    这个是发送的数据,如何保持这个会话了?小弟刚做网络编程,向各位请教一下
    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>");
      

  2.   

    为虾米不用 HttpWebRequest呢?如果你想用 Socket保持会话, 那么你要处理每一次服务器的返回。
    如果服务器返回的HTTP Head中有 Set-Cookie: 指令那么你在接下来的HTTP请求的Head中都必须带上这个 Cookie.这样才能保持session
      

  3.   

    网试了一下HttpWebRequest, 有以下几个问题:
    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;
                }        }
      

  4.   

    HttpWebRequest.Headers.Add("key", "value") 可以添加自定义Header参数
    要学会查msdn啊。现在模拟Http请求,基本都用HttpWebRequest,要么用WebClient。http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.headers(VS.80).aspx
      

  5.   

    thanks fangxinggood, 加上就OK了,以后要多查查MSDN