winform网络编程之Socket类

Socket类


(1)常用属性

AddressFamily            获取Socket的地址族

Available                获取已经从网络接收且可供读取的数据量

Connected             获取一个值,该值指示Socket是在上次Send还是Receive操作                          时链接到远程主机

Handle                   获取Socket的操作系统句柄

LocalEndPoint            获取本地终结点

RemoteEndPoint           获取远程终结点

(2)常用方法

Accept             为新建连接创建新的Socket

Close              关闭Socket链接并释放所有关联的资源

Connect            建立与远程主机的连接

Disconnect         关闭套接字链接并允许重用套接字

Listen             将Socket置于侦听侦听

Receive            接收来自绑定的Socket的数据

Send               将数据发送到链接的Socket

SendTo             将数据发送到特定终结点


(3)

下面是一段实例代码,是一部我最近的看的书上的,我放一些重要的代码在上面。

其实看了人家的代码之后,我们才知道怎样把Socket的各种属性和方法以及我上一篇博客中讲的东西结合起来看,形成一个整体的认识。


第一个静态函数的作用是:远程连接指定的主机,返回的是Socket对象

第二个静态函数的作用是:获取指定服务器的页面内容

第三个是按钮点击函数

        private static Socket ConnectSocket(string server, int port)
        {
            Socket socket = null;                    //实例化Socket对象,并初始化为空
            IPHostEntry iphostentry = null;          //实例化IPHostEntry对象,并初始化为空
            iphostentry = Dns.GetHostEntry(server);  //获得主机信息
            //循环遍历得到的IP地址列表
            foreach (IPAddress address in iphostentry.AddressList)
            {
                //使用指定的IP地址和端口号实例化IPEndPoint对象
                IPEndPoint IPEPoint = new IPEndPoint(address, port);
                //使用Socket的构造函数实例化一个Socket对象,以便用来连接远程主机
                Socket newSocket = new Socket(IPEPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                newSocket.Connect(IPEPoint);          //调用Connect方法连接远程主机
                if (newSocket.Connected)              //判断远程连接是否连接
                {
                    socket = newSocket;
                    break;
                }
                else
                {
                    continue;
                }
            }
            return socket;
        }
        //获取指定服务器的主页面内容
        private static string SocketSendReceive(string server, int port)
        {
            string request = "GET/HTTP/1.1\n主机:" + server + "\n连接:关闭\n";
            Byte[] btSend = Encoding.ASCII.GetBytes(request);
            Byte[] btReceived = new Byte[256];
            //调用自定义方法ConnectSocket,使用指定的服务器名和端口号实例化一个Socket对象
            Socket socket = ConnectSocket(server, port);
            if (socket == null)
                return ("连接失败!");
            //将请求发送到连接的服务器
            socket.Send(btSend, btSend.Length, 0);
            int intContent = 0;
            string strContent = server + "上的默认页面内容:\n";
            do
            {
                //从绑定的Socket接收数据
                intContent = socket.Receive(btReceived, btReceived.Length, 0);
                //将接收到的数据转换为字符串类型
                strContent += Encoding.ASCII.GetString(btReceived, 0, intContent);
            }
            while (intContent > 0);
            return strContent;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string server = textBox1.Text;               //指定主机名
            int port = Convert.ToInt32(textBox2.Text);   //指定端口号
            //调用自定义方法SocketSendReceive获取指定主机的主页面内容
            string strContent = SocketSendReceive(server, port);
            MessageBox.Show(strContent);
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值