Socket类的常用属性、方法及说明

Socket类为网络通信提供了一套丰富的方法和属性,它主要用于管理连接,实现Berkeley通信端套接字接口。同时,它还定义了绑定、连接网络端点及传输数据所需的各种方法,提供处理端点连接传输等细节所需要的功能。WebRequest、TcpClient和UdpClient等类在内部使用该类。

Socket类的常用属性及说明如表1所示.

               表1 Socket类的常用属性及说明

          

属性说明
AddressFamily获取Socket的地址族
Available获取已经从网络接收且可供读取的数据量
Connected获取一个值,该值指示Socket是在上次Send还是Receive操作时连接到远程主机
Handle获取Socket的操作系统句柄
LocalEndPoint获取本地终结点
ProtocolType获取Socket的协议类型
RemoteEndPoint获取远程终结点
SendTimeout获取或设置一个值,该值指定之后同步Send调用将超过的时间长度
  

 

Socket类的常用方法及说明如表2所示。

表2 Socket类的常用方法及说明

方法说明
Accept为新建连接创建新的Socket
BeginAccept开始一个异步操作来接受一个传入的连接尝试
BeginConnect开始一个对远程主机连接的异步请求
BeginDisconnect开始异步请求从远程终结点断开连接
BeginReceive开始从连接的Socket中异步接收数据
BeginSend将数据异步发送到连接的Socket
BeginSendFile将文件异步发送到连接的Socket对象
BeginSendTo向特定远程主机异步发送数据
Close关闭Socket连接并释放所有关联的资源
Connect建立与远程主机的连接
Disconnect关闭套接字连接并允许重用套接字
EndAccept异步接受传入的连接尝试
EndConnect结束挂起的异步连接请求
EndDisconnect结束挂起的异步断开连接请求
EndReceive结束挂起的异步读取
EndSend结束挂起的异步发送
EndSendFile结束文件的挂起异步发送
EndSendTo结束挂起的、向指定位置进行的异步发送
Listen将Socket置于侦听状态
Receive接收来自绑定的Socket的数据
Send将数据发送到连接的Socket
SendFile将文件和可选数据异步发送到连接的Socket
SendTo将数据发送到特定终结点
Shutdown禁用某Socket上的发送和接收
  

 

说明

  如果当前使用的是面向连接的协议(如TCP),则服务器可以使用Listen方法侦听连接。如果当前使用的是无连接协议(如UDP),则根本不需要侦听连接。调用ReceiveFrom方法可接受任何传入的数据报。使用SendTo方法可将数据报发送到远程主机。

  下面演示Socket类的使用方法。

  【例】新建一个Windows应用程序,在窗体中添加两个TextBox控件和一个Button控件。其中,两个TextBox控件分别用来输入要连接的主机及端口号;Button控件用来连接远程主机,并获得其上的主页面内容。

  代码如下:

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);
}

程序的运行结果如图1和图2所示。

             

                       图1 Socket类的使用

  

                               图2 详细信息

 

http://www.longziyong.cn/post/CSharp/2015/06/413.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值