C#教程:Socket类的属性、方法使用实例|方法
Socket类的属性、方法
本节将主要介绍Socket类的属性和方法,以便为读者使用Socket类进行网络编程提供方便。
1.Socket类的属性
下面对比较重要的属性进行详细介绍。
(1)AddressFamily属性。获取Socket的地址族。
语法:
public AddressFamily AddressFamily { get; }
注意:AddressFamily指定Socket类的实例可以使用的寻址方案。此属性为只读属性,它在创建Socket时设置。
示例
获取Socket的地址族
本示例中,当程序运行时,单击窗体中的【获取地址族】按钮,在窗体的文本框中显示出当前Socket对应的地址族,本示例,首先引入System.Net.Sockets命名空间,然后在窗体中添加一个Lable控件(用于显示信息)、一个TextBox控件(用于显示结果)和一个Button控件(用于触发事件),运行结果如图1所示。

图1 运行结果
private void button1_Click(object sender, EventArgs e)
{
if (sk != null)
{
this.textBox1.Text = sk.AddressFamily.ToString();
}
else
{
MessageBox.Show("结果为空值");
}
}
在窗体加载时,实例化Socket对象、将Socket的地址族设为InterNetwork、将Socket的类型设为Stream类型、将Socket的协议类型设为Tcp类型。FrmSockect窗体的Load事件代码如下:
private void FrmSockect_Load(object sender, EventArgs e)
{
sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
}
(2)DontFragment属性。获取或设置Boolean值,该值指定Socket是否允许将Internet协议(IP)数据报分段。
语法:
public bool DontFragment { get; set; }
注意:如果数据报大小超过传输介质的最大传送单位,则需要将数据报分段。可以由发送主机或中间路由器将数据报分段。如果必须对数据报进行分段,且已设置DontFragment选项,则会丢弃数据报,而且会将Internet控制消息协议的错误信息返回给数据报的发送方。
(3)EnableBroadcast属性。获取或设置一个Boolean值,该值指定Socket是否可以发送或接收广播数据报。
语法:
public bool EnableBroadcast { get; set; }
注意:广播仅限于特定子网,并且必须使用用户数据报协议(UDP)。对于Internet协议版本4,可通过向255.255.255.255发送数据包来向本地子网广播;也可以使用定向广播地址,即Internet协议(IP)地址的网络部分,同时所有位都在主机部分设置。例如,如果IP地址是192.168.1.40(C类地址,网络掩码为255.255.255.0,网络部分是前3个八进制数,主机部分是最后一个八进制数),则定向广播地址是192.168.1.255。
(4)MulticastLoopback属性。获取或设置一个值,该值指定传出的多路广播数据报是否传递到发送应用程序。
语法:
public bool MulticastLoopback { get; set; }
注意:多路广播是一种适用于Internet上的多对多通信的可伸缩方式。一个进程预订多路广播地址;之后,已预订进程发送的所有数据报都由预订该多路广播地址的所有其他进程接收。对传输控制协议(TCP)套接字设置此属性不起任何作用。
完整程序代码如下:
★ ★★★★FrmSockect.cs窗体代码文件完整程序代码★★★★★
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
namespace _6_02
{
public partial class FrmSockect : Form
{
public FrmSockect()
{
InitializeComponent();
}
Socket sk;
private void button1_Click(object sender, EventArgs e)
{
if (sk != null)
{
this.textBox1.Text = sk.AddressFamily.ToString();
}
else
{
MessageBox.Show("结果为空值");
}
}
private void FrmSockect_Load(object sender, EventArgs e)
{
sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
}
}
★ ★★★★FrmSockect.designer.cs窗体设计文件完整程序代码★★★★★
namespace _6_02
{
partial class FrmSockect
{
///
/// 必需的设计器变量。
///
private System.ComponentModel.IContainer components = null;
///
/// 清理所有正在使用的资源。