Windows Sockets code  Error  Description
  ------------------------------------------------------------------------  WSAEINTR              10004  Interrupted system call.
  WSAEBADF              10009  Bad file number.
  WSEACCES              10013  Permission denied.
  WSAEFAULT              10014  Bad address.
  WSAEINVAL              10022  Invalid argument.
  WSAEMFILE              10024  Too many open files.
  WSAEWOULDBLOCK        10035  Operation would block.
  WSAEINPROGRESS        10036  Operation now in progress. This error is
                                  returned if any Windows Sockets API
                                  function is called while a blocking
                                  function is in progress.
  WSAEALREADY            10037  Operation already in progress.
  WSAENOTSOCK            10038  Socket operation on nonsocket.
  WSAEDESTADDRREQ        10039  Destination address required.
  WSAEMSGSIZE            10040  Message too long.
  WSAEPROTOTYPE          10041  Protocol wrong type for socket.
  WSAENOPROTOOPT        10042  Protocol not available.
  WSAEPROTONOSUPPORT    10043  Protocol not supported.
  WSAESOCKTNOSUPPORT    10044  Socket type not supported.
  WSAEOPNOTSUPP          10045  Operation not supported on socket.
  WSAEPFNOSUPPORT        10046  Protocol family not supported.
  WSAEAFNOSUPPORT        10047  Address family not supported by protocol
                                  family.
  WSAEADDRINUSE          10048  Address already in use.
  WSAEADDRNOTAVAIL      10049  Cannot assign requested address.
  WSAENETDOWN            10050  Network is down. This error may be
                                  reported at any time if the Windows
                                  Sockets implementation detects an
                                  underlying failure.
  WSAENETUNREACH        10051  Network is unreachable.
  WSAENETRESET          10052  Network dropped connection on reset.
  WSAECONNABORTED        10053  Software caused connection abort.
  WSAECONNRESET          10054  Connection reset by peer.
  WSAENOBUFS            10055  No buffer space available.
  WSAEISCONN            10056  Socket is already connected.
  WSAENOTCONN            10057  Socket is not connected.
  WSAESHUTDOWN          10058  Cannot send after socket shutdown.
  WSAETOOMANYREFS        10059  Too many references: cannot splice.
  WSAETIMEDOUT          10060  Connection timed out.
  WSAECONNREFUSED        10061  Connection refused.
  WSAELOOP              10062  Too many levels of symbolic links.
  WSAENAMETOOLONG        10063  File name too long.
  WSAEHOSTDOWN          10064  Host is down.
  WSAEHOSTUNREACH        10065  No route to host.
  WSASYSNOTREADY        10091  Returned by WSAStartup(), indicating that
                                  the network subsystem is unusable.
  WSAVERNOTSUPPORTED    10092  Returned by WSAStartup(), indicating that
                                  the Windows Sockets DLL cannot support
                                  this application.
  WSANOTINITIALISED      10093  Winsock not initialized. This message is
                                  returned by any function except
                                  WSAStartup(), indicating that a
                                  successful WSAStartup() has not yet been
                                  performed.
  WSAEDISCON            10101  Disconnect.
  WSAHOST_NOT_FOUND      11001  Host not found. This message indicates
                                  that the key (name, address, and so on)
                                  was not found.
  WSATRY_AGAIN          11002  Nonauthoritative host not found. This
                                  error may suggest that the name service
                                  itself is not functioning.
  WSANO_RECOVERY        11003  Nonrecoverable error. This error may
                                  suggest that the name service itself is
                                  not functioning.
  WSANO_DATA            11004  Valid name, no data record of requested
                                  type. This error indicates that the key
                                  (name, address, and so on) was not found.  

解决方案 »

  1.   

                ServerSocket简介
    ServerSocket是封装了作为Server既服务器端的Socket的一个控件。在应用程序的Form中加入了ServerSocket之后,应用程序就可以作为一个服务程序而存在。当ServerSocket激活以后,正常状态下处于侦听状态,等待客户程序的连接。客户端请求连接时,启动了一个新的线程,接受客户的请求,完成连接之后,就可以给客户提供服务,服务完成之后,终止网络连接,线程退出。而主线程仍处于侦听状态,可以接受多个客户的连接请求。并可同时提供服务。
    TserverSocket 的类继承关系如下:
                                Tobject
                                Tpersistent                             Tcomponent                             TcustomSocket                             TcustomServerSocket
                 
                                 TserverSocket
    ServerSocket控件的属性
    (1) Active
    属性为true时,进入侦听状态,等待客户连接。
    (2) ServerType属性
    指明ServerSocket的类型,可取的值有:stNonBlocking,stThreadBlocking两种。
    当ServerSocket设为stThreadBlocking,则每当接受一个客户的连接就自动生成一个线程,以处理客户的各种请求。当通过它发送或接受信息时,线程就会自动进入休眠状态直到数据传输完毕,然后会发出OnClientRead或OnClientWrite事件通知,让主线程进行处理。
    把ServerSocket设定为stNonBlocking,则Socket可以异步的处理数据接收和发送。默认情况下,所有的客户连接的处理都是在单一的线程中进行的,当接收到数据或要发送数据时,也会发出OnClientRead和OnClientWrite事件通知。
    (3) ThreadCacheSize属性
    指明最大能有最大能有多少个线程在等待新的用户连接。
    当Servertype是stThreadBlocking型时,每接受一个用户连接就要产生一个新的线程,为了提高系统的性能,ServerSocket会把已经断开的客户线程保留在缓冲区里。而不是释放他们。这样当一个新的请求到来的时候,就不必创建新的线程能减少所用的时间提高性能。
               ThreadCacheSize的值不能设的太小,否则许多时间会浪费在创建和释放线程上,当然也不能太大,否则,系统资源(如内存)浪费太大,也不利于提高系统性能。
    (4) Port属性
    指明ServerSocket提供服务所在的端口号。
    (5) Service 属性
    提供服务的名称。
    如果ServerSocket已经启动,任何企图改变Port和Service属性的值将会产生一个EsocketError的异常。
    (6) name属性
    (7) Socket属性
    是一个TserverWinSocket类的对象,描述了服务器作为侦听端的特性。
    Socket对象常用的属性有:
    Connected,LocalAddress,LocalHost,LocalPort,RemoteAddress,RemoteHost,
    RemotePortd。
    ActiveConnections属性:整型(Integer),指明了ServerSocket当前正在打开的已经被接受了的客户请求,可以通过它来查看ServerSocket 的使用情况。
    AciveThreads属性:整型。指明了ServerSocket当前正在使用的TserverClientThread线程对象的数目。通过本属性的值,可以监看线程的使用情况。对于stThreadBlocking型的ServerSocket,每接受一个客户的连接,ActiveThread记数就会加一。
    IdleThread 属性:整型。指明了在当前在线程缓冲区内,但是没有使用的线程的对象的数目。通过这一值的大小可以检查ThreadCacheSize的取值是否合理。
    Connections属性:这是TcustomWinSocket对象数组。该数组的下标值是从0到ActivConnection-1。通过这一数组可以访问每一个客户端相连的Socket.。
    ServerSocket控件的方法
    (1) Open方法
    初始化ServerSocket,把Active属性设为True, 进入侦听状态,等待客户连接。
    (2) Close方法
    终止所有的Socket连接,并释放网络资源,把Active属性的值设为False,ServerSocket不在接受客户端的连接请求。
    (3) Socket对象的方法
    Socket对象的常用方法有:ReceiveLeghth,ReceiveText,ReceiveBuf,Sendtext,SendBuf等。
    ServerSocket的事件
    (1) OnClientConnect事件
    本事件发生在连接请求被接受之后,可以开始提供服务。
    (2) OnClientDisconnect事件
    当某一客户连接被终止时,产生本事件,在本事件中可以进行终止后的清除工作,如释放相关的内存等。
    (3) OnClientRead 事件
        当ServerSocket收到客户发送过来的文件之后,发出本事件的通知,要求处理数据响应客户的请求。
        对于ServerType是stThreadBlocking的Server Socket,应使用TwinSocketStream对象来读取数据。
    (4) OnClientSocketWrite事件
        在ServerSocket要向客户发送数据的时,发出本事件通知。同样 对于ServerType是stThreadBlocking的Server Socket,应使用TwinSocketStream对象来读取数据。
    (5) OnClientError事件
    同ClientSocket的Onerror事件。
      

  2.   

    zhoudut:
        谢谢你!
        我看完你的读书笔记,感觉就是Delphi帮助的翻译。
        你能给我一个sdThreadBlocking模式下服务器端的实例吗?
        [email protected]
      

  3.   

    zhoudut兄:
        帮帮忙。收到以后马上给分