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