最近了解Socked编程之一,记录第一个学习的例子源码

 

public partial class frmGetContent : Form
    {
        int port = 80;
        string ipStr = "127.0.0.1";
        //IPHostEntry ipHostInfo; //主机信息
        //IPAddress[] ipList;//IP地址列表
        IPAddress ipAddress;
        //远程终结点
        IPEndPoint ipendpoint;
        //Socket实例
        Socket socket;
        public frmGetContent()
        {
            InitializeComponent();
         
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                //ipHostInfo = Dns.GetHostByName("yesdnn.com");
                //ipList = ipHostInfo.AddressList;
                ipAddress = IPAddress.Parse(ipStr);
                //远程终结点
                ipendpoint = new IPEndPoint(ipAddress, port);
                //创建socket实例
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //尝试链接
                //socket.Connect(ipAddress, port);
                socket.Connect(ipendpoint);

                //发送给远程主机的请求内容串
               
                string sendStr="GET / HTTP/1.1\r\n Host:mzq \r\n Connection: Close\r\n\r\n";
                //sendStr = "GET / HTTP/1.1\r\nHost:mzq \r\n";
                //创建byte[] 字节数组 转换发送字符串
                byte[] bytesendStr = new byte[1024];
                //将发送内容字符串转换为字节byte数组
                bytesendStr = Encoding.ASCII.GetBytes(sendStr);
                //向主机发送请求
                socket.Send(bytesendStr, bytesendStr.Length, SocketFlags.None);
                //声明返回内容
                string recvStr="";
                //声明数组接受长度为1024的byte[]
                 byte[] byteRecvStr = new byte[1024];
                //返回实际接收内容的字节数
                //返回 实际接受内容的字节数
                int bytes=0;
                //循环读取直到数据读取完
                while(true )
                {
                    bytes = socket .Receive(byteRecvStr,byteRecvStr.Length , SocketFlags.None );
                    if(bytes<=0)
                    {
                        break ;
                    }
                    //将读取的数据流转换为字符串
                    recvStr += Encoding.ASCII.GetString(byteRecvStr,0,byteRecvStr.Length );

                }
                this.richTextBox1.Text  = recvStr;
                //双方都禁止
                socket.Shutdown(SocketShutdown.Both);
                //关闭
                socket.Close();

                //保存文件
                //将所读取的字符串转换为字节数组
                string fileName = "D:\\aaa.htm";
                byte[] content=Encoding.ASCII.GetBytes(recvStr);
                try {
                    //创建文件流对象实例
                    FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
                    //写入文件
                    fs.Write(content,0,content.Length);

                    fs.Close();
                    fs.Dispose();
                }
                catch(Exception fe)
                {
                    MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
                }
                禁用Socket
                //socket.Shutdown(SocketShutdown.Both);
               
                关闭Socket
                //socket.Close();

 

                MessageBox.Show("OK");
               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message );
            }

        }

  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值