c#Socket属性
最近在弄⼀个untity3D 的⼀个项⽬,⽬前在写⽹络模块,第⼀次接触c#,把⼀边学习,⼀边总结的Socket知识分享⼀下:Socket.AddressFamily 属性
AddressFamily指定Socket类的实例可以使⽤的寻址⽅案。此属性为只读属性,它在创建Socket时设置。
Socket s = new Socket (lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Using the AddressFamily, SocketType, and ProtocolType properties.
Console.WriteLine ("I just t the following properties of socket: " + "Address Family = " + s.AddressFamily.ToString () + "\nSocketType = " + s.SocketType.ToString () + "\nProtocolType = " + s.ProtocolType.ToString ());
Socket.Available 属性
花瓣怎么折属性值
从⽹络接收的、可供读取的数据的字节数。
备注
如果当前使⽤的是⾮阻⽌ Socket,⼀种较好的做法是在调⽤之前使⽤ Available 来确定数据是否排队等待读取。可⽤的数据即⽹络缓冲区中排队等待读取的全部数据。如果在⽹络缓冲区中没有排队的数据,则 Available 返回 0。
如果远程主机处于关机状态或关闭了连接,则 Available 会引发 SocketException。如果收到 SocketException,请使⽤属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码⽂档,获取有关该错误的详细说明。
⽰例
// FIONREAD is also available as the "Available" property.
public const int FIONREAD = 0x4004667F;
static void DisplayPendingByteCount(Socket s)
{
byte[] outValue = BitConverter.GetBytes(0);
// Check how many bytes have been received.
s.IOControl(FIONREAD, null, outValue);
uint bytesAvailable = BitConverter.ToUInt32(outValue, 0);
Console.WriteLine("rver has {0} bytes pending. Available property says {1}.",
bytesAvailable, s.Available);
return;
}
Socket.Blocking 属性
Blocking 属性指⽰ Socket 是否处于阻⽌模式。
如果当前处于阻⽌模式,并且进⾏了⼀个并不⽴即完成的⽅法调⽤,则应⽤程序将阻⽌执⾏,直到请求的操作完成后才解除阻⽌。如果希望在请求的操作尚未完成的情况下也可以继续执⾏,请将 Blocking 属性更改为 fal。Blocking 属性对异步⽅法⽆效。如果当前正在异步发送和接收数据,并希
望阻⽌执⾏,请使⽤类。
注意:梦见和前夫吵架
如果收到SocketException,请使⽤属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码⽂档,获取有关该错误的详细说明。
当在应⽤程序中启⽤⽹络跟踪功能后,此成员将输出跟踪信息。有关更多信息,请参见。
Socket.Connected 属性
获取⼀个值,该值指⽰是在上次还是操作时连接到远程主机。
命名空间:System.Net.Sockets
程序集:System(在 system.dll 中)
public bool Connected { get; }
兔起鹘落的意思/** @property */
public boolean get_Connected ()
public function get Connected () : boolean
属性值
如果 Socket 在最近操作时连接到远程资源,则为 true;否则为 fal。
Connected 属性获取截⽌到最后的 I/O 操作时 Socket 的连接状态。当它返回 fal 时,表明 Socket 要么从未连接,要么已断开连接。
Connected 属性的值反映最近操作时的连接状态。如果您需要确定连接的当前状态,请进⾏⾮阻⽌、零字节的 Send 调⽤。如果该调⽤成功返回或引发 WAEWOULDBLOCK 错误代码 (10035),则该套接字仍然处于连接状态;否则,该套接字不再处于连接状态。
如果调⽤⽤户数据报协议 (UDP) 套接字上的,则 Connected 属性始终返回 true;不过,此操作不更改 UDP 的内在⽆连接特性。
下⾯的代码⽰例连接到远程终结点,请检查 Connected 属性,然后检查连接的当前状态。
// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);
// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
byte [] tmp = new byte[1];
client.Blocking = fal;
骑虎难下是什么意思client.Send(tmp, 0, 0);
Console.WriteLine("Connected!");
}
catch (SocketException e)
{
/
/ 10035 == WSAEWOULDBLOCK
if (e.NativeErrorCode.Equals(10035))
Console.WriteLine("Still Connected, but the Send would block");
el
{
Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
}
}
finally
{
豆浆怎么做好喝client.Blocking = blockingState;
}
Console.WriteLine("Connected: {0}", client.Connected);
Socket.DontFragment 属性
获取或设置值,该值指定是否允许将 Internet 协议 (IP) 数据报分段。
如果数据报⼤⼩超过传输介质的最⼤传送单位 (MTU),则需要将数据报分段。可以由发送主机(所有版本的 Internet 协议)或中间路由器(仅 Internet 协议版本 4)将数据报分段。如果必须将⼀个数据报分段,并且已设置 DontFragment 选项,则该数据报被丢弃并且将Internet 控制消息协议 (ICMP) 错误信息发送回数据报发送⽅。
闯红灯查询对传输控制协议 (TCP) 套接字设置此属性不起任何作⽤。
下⾯的代码⽰例阐释了如何使⽤ DontFragment 属性。
static void ConfigureUdpSocket(Socket udpSocket)
{
/
/ t the Don't Fragment flag.老师眼中的我
udpSocket.DontFragment = true;
// Enable broadcast.
udpSocket.EnableBroadcast = true;
// Disable multicast loopback.
udpSocket.MulticastLoopback = fal;
Console.WriteLine("Udp Socket configured:");酸奶冰棒
Console.WriteLine(" DontFragment {0}",
udpSocket.DontFragment);
Console.WriteLine(" EnableBroadcast {0}",
udpSocket.EnableBroadcast);
Console.WriteLine(" MulticastLoopback {0}",
udpSocket.MulticastLoopback);
}
未完待续