Socket 编程中的类
Socket类:
Socket 类为网络通信提供了一套丰富的方法和属性。 Socket 类允许您使用 ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输。
Socket 类对异步方法遵循 .NET Framework 命名模式。 例如,同步的 Receive 方法对应于异步的 BeginReceive 和 EndReceive 方法。
如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。
-
如果当前使用的是面向连接的协议(如 TCP),则服务器可以使用 Listen 方法侦听连接。 Accept 方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的 Socket。 可以使用此返回的 Socket 来调用 Send 或 Receive 方法。 如果要指定本地 IP 地址和端口号,请在调用 Listen 方法之前先调用 Bind 方法。 如果您希望基础服务提供程序为您分配可用端口,请使用端口号 0。 如果希望连接到侦听主机,请调用 Connect 方法。 若要进行数据通信,请调用 Send 或 Receive 方法。
-
如果当前使用的是无连接协议(如 UDP),则根本不需要侦听连接。 调用 ReceiveFrom 方法可接受任何传入的数据报。 使用 SendTo 方法可将数据报发送到远程主机。
若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。
-
如果当前使用的是面向连接的协议(如 TCP),则可使用 Socket、 BeginConnect 和 EndConnect 方法来连接侦听主机。 通过使用 BeginSend 和 EndSend 方法,或者使用 BeginReceive 和 EndReceive 方法,可以进行异步数据通信。 可以使用 BeginAccept 和 EndAccept 处理传入的连接请求。
-
如果您使用的是 UDP 等无连接协议,则可以使用 BeginSendTo 和 EndSendTo 来发送数据报,而使用 BeginReceiveFrom 和 EndReceiveFrom 来接收数据报。
如果对一个套接字执行多个异步操作,它们不一定按启动时的顺序完成。
当数据发送和数据接收完成之后,可使用 Shutdown 方法来禁用 Socket。 在调用 Shutdown 之后,可调用 Close 方法来释放与 Socket 关联的所有资源。
通过 Socket 类,您可以使用 SetSocketOption 方法来配置 Socket。 可以使用 GetSocketOption 方法来检索这些设置。
eg:Socket skt = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
sck.Bind(endpoint);// Socket绑定网路通信节点
sck.Listen(10); //设置监听队列
sck.accept();
因为. net环境下,默认启动的对Ui线程的数据检测,不允许其它线程对他的数据进行访问,你需要在构造函数中添加下面代码,使不检测。
TextBox.CheckForIllegalCrossThreadCalls = false;
ipAddress类:
IPAddress 类包含计算机在 IP 网络上的地址。eg: IPAddress ip = IPAddress.Parse(iptxt.Text);
IPEndPoint类:IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和本地或远程端口信息。 通过组合服务的主机 IP 地址和端口号,IPEndPoint 类形成到服务的连接点。
eg:IPEndPoint endpoint = new IPEndPoint(ip,int.Parse(pottxt.Text));
接收消息的语句:
public void Receivemsg()
{
byte[] buffer = new byte[1024 * 1024];
accSck.Receive(buffer);//接受数据
string receivemsg = System.Text.Encoding.UTF8.GetString(buffer);// 字符转换
ShowMsg("接收到的数据:" + receivemsg);
}
发送数据:
string SendMsg = textBox3.Text;
if (SendMsg != "")
{
byte[] buffer = new byte[1024 * 1024 * 1024];
buffer = System.Text.Encoding.UTF8.GetBytes(SendMsg);
accSck.Send(buffer);//发送数据
ShowMsg("向客户端发送了:" + SendMsg);
}
SocketFlags 枚举:
指定套接字的发送和接收行为。
此枚举有一个 FlagsAttribute 特性,通过该特性可使其成员值按位组合。
Socket. Shutdown 方法:禁用某 Socket 上的发送和接收。
如果当前使用的是面向连接的 Socket,则必须先调用 Shutdown 方法,然后才能关闭 Socket。 这可以确保在已连接的套接字关闭之前,已发送和接收该套接字上的所有数据。
调用 Close 方法可释放所有与 Socket 关联的托管资源和非托管资源。 在关闭 Socket 后请不要尝试重用它。
如果当前使用的是无连接的协议,则将接受数据报并将其放入队列中。 但是,如果没有可用的缓冲区空间来存储传入的更多数据报,则会放弃这些数据报,而且不会给发送方返回任何错误。 建议不要在无连接 Socket 上使用 Shutdown。
SocketShutdown 枚举:SocketShutdown 枚举定义可传递给 Socket. Shutdown 方法的值。