Winsocket网络编程谈 飞人 2001年 42期 Winsocket编程是非常复杂的,这令一般人望而生畏。但如果你想编写这样的程序,又不懂得相关知识,怎么办呢?Delphi的网络组件库中为我们提供了关于实现网络通信的组件,其中ClientSocket和ServerSocket组件使我们能够很方便地编写出自己的网络通信和资源共享程序。   #1 设置Winsocket属性   在Delphi4.0中,将Winsocket细分为两种组件:ClientSocket和ServerSocket,它们分别作为客户端和服务器端的组件。通过这两种组件之间的通信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然,如果你想在客户端程序中再引入ServerSocket的话,那么客户端程序就可以充当服务器了,可以对其他的客户端程序的请求进行响应。   如果正在编写服务器端程序,就必须设置ServerSocket组件的Port属性。设置此参数主要是因为在同一台计算机上可能运行着多个服务器程序,而它们可能总在不停地接受来自于远程客户端程序的连接请求。也可以设置Service属性,它指示了ServerSocket所提供的服务类型,比如:FTP、HTTP等,然后设置Active属性为True。   如果正在编写客户端程序,则设置ClientServer组件的属性就多一些。Port属性应设置成和服务器端的Port属性值一致,另外Host的属性必须正确设置,它是一个只读属性,在设计时不可用。Host指示了客户程序所要连接的远程服务器的主机名。也可以设置Address属性,也就是远程主机的IP地址。   #1 建立与远程计算机的连接   要在远程计算机系统之间进行数据传输,首先必须在通信的两台主机之间建立连接。   服务器端的ServerSocket组件调用Open方法初始化Socket连接,同时也就设置了Active属性为True,将ServerSocket组件设置成侦听模式,随时侦测是否有连接请求。   如果服务器接受了客户程序的连接请求,则触发OnAccept事件,如下代码就是处理接受连接后服务器程序所要做的工作。   procedure Myform..ServerSocketAccept(Sender:TObject,Socke:TCustomWinSocket);   begin   IsServer:= True;   end;   在客户端程序中,ClientSocket组件则设置Port、Host等必须的属性,然后设置Active属性为True,提出连接请求。   #1 计算机之间的数据传输   一旦服务器端接受了客户机方面的连接请求,客户机就可以发送数据。这时,在客户机和服务器之间就拥有了一个Socket,通过此Socket双方实现通信。所以Socket属性很重要,它又拥有很多的方法,用其中的几个简单的方法,就可以实现数据的发送和接收。   客户机端用如下形式:ClientSocket1.socket.sendtext('string you want to send');   在服务器端采用如下形式:ServerSocket1.socket.recievetext(str,string);   此函数返回接收到的字符串的长度,将字符串存储在变量str中。   上述是数据传输的最简单的例子,你还可以采用Socket属性所提供的其他方法来实现复杂的数据传输。