在.net下进行网络编程其实也相对比较简单,因为在.net类库已经提供了大量封装好的类。在.net下网络编程比较底层的类是System.Net.Sockets.Socket类,这个类提供了丰富的方法和属性,并且还提供了异步数据传输支持。 对Socket类做一个简单的介绍,它有如下常见方法: public Socket Accept ():为新建连接创建新的 Socket。 public void Bind (EndPoint localEP):使 Socket 与一个本地终结点相关联。 public void Close ():关闭 Socket 连接并释放所有关联的资源。注意这个方法有冲载方法。 public void Connect (EndPoint remoteEP):建立与远程主机的连接。注意这个方法有重载方法。 public void Disconnect (bool reuseSocket):关闭套接字连接并是否允许重用套接字。 public void Listen (int backlog):将 Socket 置于侦听状态。 public int Receive (byte[] buffer):接收来自绑定的 Socket 的数据。注意这个方法有重载方法。 public int ReceiveFrom (byte[] buffer,ref EndPoint remoteEP):接收数据报并存储源终结点。注意这个方法有重载方法。 public int Send (byte[] buffer):将数据发送到连接的 Socket。注意这个方法有重载方法。 public void SendFile (string fileName):将文件和可选数据异步发送到连接的 Socket。注意这个方法有重载方法。 public int SendTo (byte[] buffer,EndPoint remoteEP):将数据发送到特定终结点。注意这个方法有重载方法。 public void Shutdown (SocketShutdown how):禁用某 Socket 上的发送和接收。 说明: 因为在网络传输时传输的数据都是二进制形式的(表现为字节数组),所以如果要传输类似于中文这样的双字节字符就需要在传输之前用合适的编码转换成字节数组,然后接收方按照发送方的编码将接收到字节数组转换成字符串。另外,注意接收数据的时候是先声明了一个字节数组,然后将接收到的数据保存到字节数组中,这个方法有个返回值表示实际接收了多少字节数据。这是因为数组是不可变的,假如声明了一个1024字节大小的数组,而发送方仅发送1字节数据,而接收方并不直到发送方发送的数据量把整个1024字节当作发送发送的数据的话,最终会发生错误。 要实现一个服务器端的面向连接的Socket用于接收客户端的请求的话,有如下步骤: (1)首先根据ip地址和端口号实例化一个Socket,注意端口要要大于1024并且不要使用特殊端口号,要大于1024的原因是1024以下的端口号已经被指派了,而1433、3306这样的端口号已经被用作SQL Server和MySQL的默认端口号了,若指定为这些端口号容易发生冲突。 (3)接着调用Bind()方法进行绑定,然后再调用Listen()方法用于监听,Listen()方法的参数用于指定监听的队列大小,也就是最多可容纳的等待接受的传入连接数。 (4)再调用Accept()方法,调用这个方法之后会是程序处于阻塞状态,直至有客户端连接为止。当有客户端连接,这个方法将会返回一个新的Socket,使用这个Socket与客户端进行通讯。 (5)使用Accept()方法返回的新Socket的Send()方法就可以向客户端发送数据了,还可以使用这个新Socket的Receive()接收客户端的数据。 (6)最后终止与客户端会话时,注意使用ShutDown()方法关闭Socket连接,并且使用Close()方法释放所占用的资源。