大家好!
    我想在C#中跟远程的服务建立Http连接,我可以通过Http发送数据和读取返回的数据!
    谢谢!希望能给详细的代码和原理分析.在线等.

解决方案 »

  1.   

    读取argv[0]参数中输入网址的内容using System;
    using System.Net;
    using System.Text;
    class DownloadDataTest
    {
      public static void Main (string[] argv)
      {
       WebClient wc = new WebClient();
       byte[] response = wc.DownloadData(argv[0]);
      Console.WriteLine(Encoding.ASCII.GetString(response));
      }
    }
      

  2.   

    System.Net.WebClient wc=new System.Net.WebClient();
    wc.DownloadFile("http://127.100.1.4/zwx/cts/cts.exe","cts.exe");
    wc.DownloadFile("http://127.100.1.4/zwx/cts/cts.pdb","cts.pdb");
      

  3.   

    各位:
        我的意思是怎么建立Http连接?如何通过Http的形式向远程发数据?如何接受从远程返回的数据?
        都是通过Http的形式!谢谢!
      

  4.   

    msdn查询HttpWebRequest和HttpWebResponse
      

  5.   

    我知道查询HttpWebRequest和HttpWebResponse这两个,问题我是新手,不知道如何来用这两个,如果有一段示例代码可能会好些.
      

  6.   

    还有我并不是想要到某一网页上下载什么东西,我是想通过Http协议来跟远程的服务器进行数据传送.请大家帮帮手!
      

  7.   

    数据传送构造一个url,加上你要传输得信息
    根据要求选择方法是post还是get,再create webrequest实例就好了.
    msdn自带例子的,去看吧
      

  8.   

    shrinerain(圣影雨):
      您能给给实例看一下吗?
      

  9.   

    lhx1977(清水无鱼) :
    是呀,因为我是新手.没办法呀?谁让我技不如人呢?
      

  10.   

    HTTP协议是承载在TCP/IP协议之上的,.net中提供WebRequest,WebResponse类将HTTP协议已经封装,楼上有很多例子,另外,WEBClient也是一个在WEB开发中用得比较常见的类,可快速的下载或上传文件数据等。实际上底层都采用Socket的通讯方式,采用TCP连接,然后根据HTTP协议与HTTPServer进行交互,HTTP协议可以到网上找到。Microsoft提供了一个WEBServer的例子,你可以去下了研究研究,核心包括多线程数据并发处理以及协议的解析与封装。
      

  11.   

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;namespace ChinaxTest.HttpServerClass
    {

    public delegate void ServerStartEventHandler(object sender,ServerStartEventArgs e);
    public delegate void ClientContentedEventHandler(Socket sender,ClientConnectedEventArgs e);
    /// <summary>
    /// HttpServiceClass 的摘要说明。
    /// </summary>
    public class HttpServer
    {

    public event ServerStartEventHandler OnServerStartEventHandler;
    public event ClientContentedEventHandler OnResMessage;
    public HttpServer()
    {

    } #region 私有成员
    private Socket m_socket; private int _Port=8080;//侦听端口 private long RecSize=0; private long SendSize=0;

    private bool _IsRuning;
    #endregion #region 属性定义
    /// <summary>
    /// 侦听端口
    /// </summary>
    public int Port
    {
    get
    {
    return _Port;
    }
    set
    {
    _Port=value;
    }
    }
    /// <summary>
    /// 指示服务是否正在运行
    /// </summary>
    public bool IsRuning
    {
    get
    {
    return this._IsRuning;
    }
    set
    {
    this._IsRuning=value;
    }
    }

    #endregion public void StartService(int port)
    {
    this.Port=port;
    this.StartService();
    } /// <summary>
    /// 启动服务
    /// </summary>
    public void StartService()//开始服务
    {
    if(this.IsRuning)
    {
    throw  new InvalidOperationException();
    }

    m_socket=new Socket(System.Net.Sockets.AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    m_socket.Bind(new IPEndPoint(IPAddress.Any, this.Port));
    m_socket.Listen((int)SocketOptionName.MaxConnections); this.IsRuning=true;

    ThreadPool.QueueUserWorkItem(new WaitCallback(OnStart));


    }
    public void SendResult(string result,Socket socket)
    {
    System.Text.StringBuilder sbResult=new System.Text.StringBuilder();//根据HTTP协议发送
    //****************************************************************报头部分
    sbResult.Append("HTTP/1.1 200 OK\n");
    sbResult.Append("Date: "+DateTime.Now.ToUniversalTime().ToString()+"\n");
    sbResult.Append("Server: ChinaxTest/1.2.6 \n");
    sbResult.Append("Connection: close \n");
    sbResult.Append("Content-Type: text/html \n");
    sbResult.Append("\n");

    sbResult.Append(result);//内容
    try
    {
    byte[] resultBytes=System.Text.Encoding.Default.GetBytes(sbResult.ToString());
    socket.Send(resultBytes);
    }
    catch
    {
    }
    socket.Close();
    } public void StopService()//停止服务
    {
    if(!this.IsRuning)
    {
    return;
    }
    try
    {
    this.m_socket.Close();
    }
    catch
    { }
    finally
    {
    this.m_socket=null;
    }
    Thread.Sleep(100);
    this._IsRuning=false;
    } #region 内部使用方法
    private void OnStart(Object unused)
    {
    while(this.IsRuning)
    {
    try
    {
    Socket acceptSocket=this.m_socket.Accept();
    ThreadPool.QueueUserWorkItem(new WaitCallback(OnAccept),acceptSocket);
    }
    catch
    {
    Thread.Sleep(100);
    }
     

    }
    }
    private void OnAccept(object socket)
    {
    Socket sourceSocket=(Socket)socket;
    try
    {
    byte[] recBytes=new byte[1024];
    sourceSocket.Receive(recBytes,recBytes.Length,0);
    if(this.OnResMessage!=null)
    {
    ClientConnectedEventArgs e=new ClientConnectedEventArgs(recBytes);
    this.OnResMessage(sourceSocket,e);
    }
    }
    catch
    {

    } }
    #endregion
    }
    }
      

  12.   

    using System;
    using System.Data;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Web;namespace ChinaxTest.HttpServerClass
    {
    public enum HttpMethod
    {
    POST,
    GET
    }
    /// <summary>
    /// HTTP协议解析类
    /// </summary>
    public class HttpRequest
    {
    private string _Url;
    private HttpMethod _Method;
    private NameValueCollection _QueryString;
    private string _FileName; public HttpRequest(byte[] sourceBytes)
    {
    this.HeaderBytes=sourceBytes;
    this.InitRequest();
    this.FillParamer();
    } #region 属性定义
    public NameValueCollection QueryString
    {
    get
    {
    if(this._QueryString==null)
    {
    this._QueryString=new NameValueCollection();
    }
    return _QueryString;
    }
    }
    /// <summary>
    /// 获取请求URL地址
    /// </summary>
    public string Url
    {
    get
    {
    return _Url;
    }
    set
    {
    _Url=value;
    }
    }
    /// <summary>
    /// 获取请求文件名
    /// </summary>
    public string FileName
    {
    get
    {
    return _FileName;
    }
    set
    {
    _FileName=value;
    }
    } /// <summary>
    ///  请求类型,POST OR GET
    /// </summary>
    public HttpMethod Method
    {
    get
    {
    return _Method;
    }
    set
    {
    _Method=value;
    }
    } private byte[] _HeaderBytes;
    /// <summary>
    /// 源HTTP头
    /// </summary>
    private byte[] HeaderBytes
    {
    get
    {
    return _HeaderBytes;
    }
    set
    {
    _HeaderBytes=value;
    }
    }
    #endregion #region 解析HTTP头提供的方法
    /// <summary>
    /// 解析HTTP头内容
    /// </summary>
    private void InitRequest()
    {
    ByteParser fristLine=new ByteParser(this.HeaderBytes);
    ;
    ByteString myByteString=fristLine.ReadLine();
    ByteString[] elems=myByteString.Split(' '); if(elems==null||elems.Length<=0)
    {
    return;
    }
    if(elems.Length>0)
    {
    if(elems[0].GetString().Trim().ToUpper()=="POST")
    {
    this.Method=HttpMethod.POST;
    }
    else
    {
    this.Method=HttpMethod.POST;
    }
    }
    if(elems.Length>1)
    {
    this.Url=elems[1].GetString().ToString().Trim().Replace(@"\","/");
    }
    else
    {
    this.Url="";
    }
    }
    private void FillParamer()
    {
    if(this.Url=="")
    {
    return;
    }
    int paramerStart=this.Url.LastIndexOf("?");
    string paramerStr="";
    int nameStart=0;
    int nameLength=this.Url.Length;
    if(this.Url.Substring(0,1)=="/")
    {
    nameStart=1;
    }
    if(paramerStart<=0)
    {
    this.FileName=this.Url.Substring(nameStart,nameLength);
    return;
    }
    else if(paramerStart>1)
    {
    this.FileName=this.Url.Substring(nameStart,paramerStart-1);
    }

    paramerStr=this.Url.Substring(paramerStart+1);
    string[] paramerElems=paramerStr.Split('&');
    if(paramerElems==null||paramerElems.Length<1)
    {
    return;
    }
    for(int i=0;i<paramerElems.Length;i++)
    {
    string paramer=paramerElems[i];
    if(paramer=="")
    {
    break;
    }
    string[] tempParamerList=paramer.Split('=');
    if(tempParamerList.Length>1)
    {
    this.QueryString.Add(tempParamerList[0].Trim(),tempParamerList[1].Trim());
    }
    }


    }
    #endregion #region 获取URL参数提供的方法

    #endregion



    }
    }
      

  13.   

    kuzhuxuan:
      您好,非常感谢您的回复,请问您能用Webrequest和Webreponse进行发送和接收吗?谢谢!