c#网络编程基础
1 IPHostEntry iphost = Dns.GetHostEntry("www.google.com.hk");
2 IPAddress[] ip = iphost.AddressList; //获取列表
3 EndPoint ep = new IPEndPoint(ip[0], 80); //创建结点
4 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //初始化socket
5 socket.Connect(ep); //连接
6 if (socket.Connected)
7 {
8 Console.WriteLine("连接成功!");
9 }
首先创建Socket对象的实例,这可以通过Socket类的构造方法来实现:
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);
其中,addressFamily 参数指定Socket使用的寻址方案,比如AddressFamily.InterNetwork表明为IP版本4的地址;
socketType参数指定Socket的类型,比如SocketType.Stream表明连接是基于流套接字的,而SocketType.Dgram表示连接是基于数据报套接字的。
protocolType参数指定Socket使用的协议,比如ProtocolType.Tcp表明连接协议是运用TCP协议的,而Protocol.Udp则表明连接协议是运用UDP协议的。
在创建了Socket实例后,我们就可以通过一个远程主机的终结点和它取得连接,运用的方法就是Connect()方法:
一旦连接成功,我们就可以运用Send()和Receive()方法来进行通讯。
Send()方法public int Send (byte[] buffer, int size, SocketFlags flags);
其中,参数buffer包含了要发送的数据,参数size表示要发送数据的大小,而参数flags则可以是以下一些值:SocketFlags.None、SocketFlags.DontRoute、SocketFlags.OutOfBnd。
该方法返回的是一个System.Int32类型的值,它表明了已发送数据的大小
在通讯完成后,我们就通过ShutDown()方法来禁用Socket,函数原型如下:
public void ShutDown(SocketShutdown how);
其中的参数how表明了禁用的类型,SoketShutdown.Send表明关闭用于发送的套接字;SoketShutdown.Receive表明关闭用于接收的套接字;而SoketShutdown.Both则表明发送和接收的套接字同时被关闭。
应该注意的是在调用Close()方法以前必须调用ShutDown()方法以确保在Socket关闭之前已发送或接收所有挂起的数据。一旦ShutDown()调用完毕,就调用Close()方法来关闭Socket