网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。在java语言中,socket已经高度封装,使用它传递信息十分方便。
如果利用本地机作为一台服务器,则它先要开放一个端口,比如,开放8000端口,就用这一条:
ServerSocket server = new ServerSocket(8000);
要是想要远程连接,就要在服务器设置“监听”:
Socket ss = server.accept();
客户端要连上,就用:
Socket socket = new Socket("localhost", 8000);
就建立了到服务器端8000号端口的连接。
我们可以利用socket传递任何信息,字符串、图片、声音、甚至视频,都可以通过socket传递,因为它们都可以编码成byte类型的东西存在数组中,就传视频来说,实际上就是传一帧又一帧的图片。这为我们的软设2项目提供了很好的素材。