目标:使用C#制作一个简单的TCP/UDP测试工具,并且熟悉c#中的socket编程,具备TCP客户端和UPD客户端的功能,并能进行数据收发。
  知识准备:
  1、socket为何物?
  2、c#中需要包含的头文件及用到的API
  3、建立一个TCP连接/UDP连接的流程
  4、编码测试,发现问题
  socket--套接字。首先提到文件描述符这样一个概念。
  文件描述符-文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。文件中的数据个人理解,是为应用服务;但应用所需要的数据可能来自本地(通过文件描述符打开文件,读取其中的数据),也可能来自网络(需要对套接字进行操作了)。
  摘引百科一段话:
  socket非常类似于电话插座。以一个电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接
  至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:
  (协议,本地地址,本地端口)
  c#使用socket需要包含的命名空间system.Net.Sockets。
  http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.aspx
  附上一个MSDN中的socket类相关命名空间说明,从中了解各个类及方法的使用。