当前位置:文档之家› C#网络编程

C#网络编程

C#网络编程
C#网络编程

IPAddress ip = IPAdress.Parse(“192.168.1.1”);

IPAddress类提供了7个只读字段,分别代表程序中使用的特殊的IP地址:

Any 表示本地系统可用的任何IPV4地址

Broadcast 表示本地IPV4网络广播地址

IPV6Any Socket.Bind方法用此字段指出本地系统可用的IPV6地址

IPV6Loopback 表示系统的IPV6回送地址

IPV6None 表示系统上没有可用的IPV6网络接口

Loopback 表示系统的IPV4回送地址

None 表示系统上没有可用的IPV4网络接口

GetHostAddresses方法

获取指定主机的IP地址,返回一个IPAddress类型的数组,函数原型为:Public static IPAddress[] GetHostAddresses(string hostNameOrAddress);

例如:

IPAddress[] ip = Dns.GetHostAddresses(“https://www.doczj.com/doc/206269147.html,”);

listBox1.Items.AddRange(ip);

GetHostName方法:

获取本机主机名。例如:

String hostname = Dns.GetHostName();

IPHostEntry类包含两个常用的属性:

1.AddressList属性的作用是获取或设置与主机相关联的IP地址列表,是一个

IPAddress类型的数组,包含了指定主机的所有IP地址。

2.HostName属性包含了服务器的主机名。

例子:

listBox1.Items.Add(“搜狐新闻所用的服务器IP地址有:”);

IPAddress[] ip = Dns.GetHostEntry(“https://www.doczj.com/doc/206269147.html,”).AddressList;

listBox1.Items.AddRange(ip);

listBox1.Items.Add(“本机IP地址为:”);

ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

listBox1.Items.AddRange(ip);

IpEndPoint类的构造函数:

Public IPEndPoint(IPAddress,int); IPAddress参数指定IP地址,,int指定相应的端口号。网络地址和服务端口的组合称为端点。在C#中使用IPEndPoint类表示这个端点,该类包含了应用程序连接到主机的服务所需的IP地址和端口信息。

结合IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法运行下面的例子:Private void buttonLocal_Click(object sender , EventArgs e)

{

listBox1.Items.Clear();

string name = Dns.GetHostName();

listBox1.Items.Add(“本机主机名:” + name);

IPHostEntry me = Dns.GetHostEntry(name);

listBox1.Items.Add(“本机所有IP地址:”);

foreach(IPAddress ip in me.AddressList)

{

listBox1.Items.Add(ip);

}

IPAddress localip = IPAddress.Parse(“127.0.0.1”);

IPEndPoint iep = new IPEndPoint(localip,80);

listBox1.Items.Add(“The IPEndPoint is:” + iep.ToString());

listBox1.Items.Add(“The max port number is:”+IPEndPoint.MaxPort);

listBox1.Items.Add(“The min port number is:”+IPEndPoint.MinPort);

}

Private void buttonRemote_Click(object sender , EventArgs e)

{

listBox1.Items.Clear();

IPHostEntry remoteHost = Dns.GetHostEntry(“https://www.doczj.com/doc/206269147.html,”);

IPAddress[] remoteIP = remoteHost.AddressList;

listBox1.Items.Add(百度:);

foreach(IPAddress ip in remoteIP)

{

IPEndPoint iep = new IPEndPoint(ip,80);

listBox1.Items.Add(iep);

}

}

Socket类包含在https://www.doczj.com/doc/206269147.html,.Sockets命名空间中。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表

创建套接字实例:

Socket socket = new Socket(AddressFamily.InterNetWork,SocketType.Stream,ProtocolType.Tcp)

Socket对象的SetSocketOption方法设置套接字的四种重载方法:

Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,Boolean value) Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,byte[] value)

Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,int value)

Public void SetSocketOption(SocketOptionLevel ol,SocketOptionName on,object value)

Value参数指定SocketOptionName的值。例如:

Socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeOut,1000);

面向连接的套接字编程

Bind(IPEndPoint address)Address为IPEndPoint的实例,该实例包括一个本地IP地址和一个端口号。绑定之后开始监听:

Listen(int backlog) backlog参数指出系统等待用户程序服务排队的连接数,超过连接数的任何客户端都不能与服务器进行通信。

当有客户连接进来之后应创建新的Socket套接字进行接收Socket clientSocket = Localsocket.Accept();

接受客户机连接之后,客户机和服务器可以传递数据。

Sock.Shutdown(SocketShutdown.Both);

Sock.Close();

设备1 设备2

无连接套接字编程

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); NetWorkStream networkStream = new NetWorkStream(socket);

一旦构造了一个NetWorkStream对象,就不需要使用Socket对象了。

TcpClient()类的四种重载方法:

1.TcpClient(): TcpClient tcpClient = new TcpClient();

tcpClient.Connect(“https://www.doczj.com/doc/206269147.html,”,51888);

2.TcpClient(AddressFamily family): TcpClient tcpClient = new

TcpClient(AddressFamily.InterNetwork);tcpClient.Connect(“https://www.doczj.com/doc/206269147.html,”,51888)

3.TcpClient(IPEndPoint iep):IPAddress[] address =

Dns.GetHostAddresses(Dns.GetHostName()); IPEndPoint iep = new

IPEndPoint(address[0], 51888); TcpClient tcpClient = new TcpClient(iep);

tcpClient.Connect("https://www.doczj.com/doc/206269147.html,", 51888);

4.TcpClient(string hostname,int port): TcpClient tcpClient=new TcpClient("https://www.doczj.com/doc/206269147.html,",

51888);

TcpListenner类两种重载方法:

1.TcpListener(IPEndPoint iep)

2.TcpListener(IPAddress localAddr,int port)

四种方法:

1.AcceptSocket()

2.AcceptTcpClient()

3.Start()

4.Stop()

解决TCP协议消息边界问题的方法有三种:

1.发送固定长度的消息

2.将消息长度和消息一起发送

3.使用特殊标记分隔符

EndSend 结束挂起的异步发送

相关主题
文本预览
相关文档 最新文档