“套接字”或者“插座”(Socket)也是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。线缆的每一端都插入一个“套接字”或者“插座”里。当然,机器之间的物理性硬件以及电缆连接都是完全未知的。抽象的基本宗旨是让我们尽可能不必知道那些细节。
在Java中,我们创建一个套接字,用它建立与其他机器的连接。从套接字得到的结果是一个InputStream以及OutputStream(若使用恰当的转换器,则分别是Reader和Writer),以便将连接作为一个IO流对象对待。有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;以及Socket,客户用它初始一次连接。一旦客户(程序)申请建立一个套接字连接,ServerSocket就会返回(通过accept()方法)一个对应的服务器端套接字,以便进行直接通信。从此时起,我们就得到了真正的“套接字-套接字”连接,可以用同样的方式对待连接的两端,因为它们本来就是相同的!此时可以利用getInputStream()以及getOutputStream()从每个套接字产生对应的InputStream和OutputStream对象。这些数据流必须封装到缓冲区内。可按第10章介绍的方法对类进行格式化,就象对待其他任何流对象那样。
对于Java库的命名机制,ServerSocket(服务器套接字)的使用无疑是容易产生混淆的又一个例证。大家可能认为ServerSocket最好叫作“ServerConnector”(服务器连接器),或者其他什么名字,只是不要在其中安插一个“Socket”。也可能以为ServerSocket和Socket都应从一些通用的基础类继承。事实上,这两种类确实包含了几个通用的方法,但还不够资格把它们赋给一个通用的基础类。相反,ServerSocket的主要任务是在那里耐心地等候其他机器同它连接,再返回一个实际的Socket。这正是“ServerSocket”这个命名不恰当的地方,因为它的目标不是真的成为一个Socket,而是在其他人同它连接的时候产生一个Socket对象。
然而,ServerSocket确实会在主机上创建一个物理性的“服务器”或者侦听用的套接字。这个套接字会侦听进入的连接,然后利用accept()方法返回一个“已建立”套接字(本地和远程端点均已定义)。容易混淆的地方是这两个套接字(侦听和已建立)都与相同的服务器套接字关联在一起。侦听套接字只能接收新的连接请求,不能接收实际的数据包。所以尽管ServerSocket对于编程并无太大的意义,但它确实是“物理性”的。
创建一个ServerSocket时,只需为其赋予一个端口编号。不必把一个IP地址分配它,因为它已经在自己代表的那台机器上了。但在创建一个Socket时,却必须同时赋予IP地址以及要连接的端口编号(另一方面,从ServerSocket.accept()返回的Socket已经包含了所有这些信息)。
什么是套接字
时间: 2025-01-01 23:45:12
什么是套接字的相关文章
socket-RUBY编写的套接字文件格式约定根据什么确定?
问题描述 RUBY编写的套接字文件格式约定根据什么确定? 各位大神,本人小白一个,我就想弱弱的问问用ruby编写的sockets文件怎么约定格式?比如,帧头,数据,功能号,结束符都依据什么信息而来?在线等,急急急!!! 解决方案 这个根据协议决定,没有什么规定.你要和对方协商.如果你要实现标准的协议,比如tcp,http,那么才需要按照约定来.
Python中利用原始套接字进行网络编程的示例
这篇文章主要介绍了Python中利用原始套接字进行网络编程的示例,使用sock_raw接受和发送数据包可以避开网络协议的诸多限制,需要的朋友可以参考下 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送. 使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TC
使用异步Servlet扩展AJAX应用程序--多路复用客户端套接字
作为Web应用程序模型的AJAX的出现使服务器端的面貌发生了巨大的变化.用户对着Web页面填写表单并单击提交按钮转到下一个链接的典型Web使用模式现在正在转变为更先进的客户端JavaScript以及功能更丰富的用户界面,只要对表单进行操作,比如单击一个复选框.按下一个键或将鼠标移到一个选项卡上,该用户界面就会不断地与服务器交互. 考虑一下从客户端传输到服务器的数据量有多大.从可用性的角度来看,用户在一个薄客户端浏览器上获得了富用户界面,无需安装任何东西.但是,当在服务器端扩展这些应用程序时就要付
PHP套接字编程
编程 作者:久隆信息/张晓刚 套接字编程,一般使用c或c++.特别的在web应用程序开发中,常用perl实现套接字.除此以外,用php进行套接字编程也是一个选择.Php可以胜任吗?当然可以.Php是一门高质量的web应用程序开发语言,他的许多特性可以处理众多的任务,网络编程也不例外. 1. 理解套接字 Mail.ftp.telnet.name和finger这些服务都是在一个专用的公开的端口上提供的,通过连接到这些端口,客户程序就能够访问这些服务.这与现实生活是相似的--当需要干洗衣服的时候,找干
Java套接字编程(上)(3)
编程 ServerSocket类 由于SSClient使用了流套接字,所以服务程序也要使用流套接字.这就要创建一个ServerSocket对象,ServerSocket有几个构造函数,最简单的是ServerSocket(int port),当使用ServerSocket(int port)创建一个ServerSocket对象,port参数传递端口号,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连
利用套接字机制实现Flash与数据库连接
数据|数据库|数据库连接 无论对于Java开发者还是.NET开发者来说,在Flash中创建一个数据库连接都不是件简单的事情.由于解决这一问题需要费不少的周折,所以本文中我们通过建立一个XMLSocket类来帮助实现这一技术. 一. 简介 对于一位具有传统型客户-服务器背景的开发人员来说,转入到ActionScript开发并把Flash连接到一个数据库肯定需要费不少的周折.在.NET或Java世界中,通过直接从应用程序中调用数据库,你仅需要打开一个到数据库的连接并且执行数据库操作即可:而在Flas
实现基于事件通知的.Net套接字
以前学过MFC,我用过的它里面的包装Winsock的两个类CSocket和CAsyncSocket,我一直觉得它哪个事件通知的功能比较不错,特别是在连接的两方收发数据没有一定的规律的时候比较有用,虽然不用它的事件通知也可以实现功能,但是你需要循环检测套接字的状态或者阻塞等待,如果每次都要做这些琐碎的工作岂不是很麻烦,于是我就想对这些功能作一次封装.当然在.net里面采用delegate和event是最好的选择了.下面就是我实现的一些细节: 先讲一下思路:其实这个还是很简单了,估计高手们会不屑一顾
一个基于原始套接字的嗅探器
嗅探器这个代码我去年的时候就已经写过了,这个学期并不是非常忙,顺手复习网络,就又尝试着写了一遍. 其实在写嗅探器的时候,最主要的还是要将网卡设置为混杂模式.在此基础之上,对抓到的数据包进行分析. 这个是我写出来的效果图,目前只是方便于查看,连菜单都没添加: 左面的界面显示的是主机和主机之间的链接信息,而右面则是选中主机信息之间的数据交互情况. 我觉得我这个嗅探器应该是个失败品,或者说,没能够真正的将网卡设置为混杂模式.因为可以看到,上面的源地址全部都是本地主机地址,我在下载视频文件的时候,每秒几
基于套接字通信的远程截屏显示与控制技术
远程控制技术在远程设备(软件)的维护.监控与故障诊断等方面有广泛的应用前景,且大 都使用Client/Server模式.该结构包括连接在网络中的多台计算机,那些处理应用.请求另 一计算机服务的计算机为客户机(本地机),而响应请求并处理请求的计算机称为服务器(目标 机). 远程控制的原理[1]是:用户连接到网络上,客户程序发送身份验证信息和与远 程主机连接的请求,远程主机的服务器端程序验证客户身份,若验证通过,就与客户建立连 接,并向用户发送验证通过和已建立连接的信息.此时用户便可以通过客户端程序
thrift的TTransport层的堵塞的套接字I/O传输类TSocket
本节将介绍第一个实现具体传输功能的类TSocket,这个类是基于TCP socket实现TTransport的接口 .下面具体介绍这个类的相关函数功能实现. 1.构造函数 分析一个类的功能首先看它的定义和构 造函数实现,先看看它的定义: class TSocket : public TVirtualTransport<TSocket> { ......} 由定义可以看书TSocket继承至虚拟传输类,并且把 自己当做模板参数传递过去,所以从虚拟传输类继承下来的虚拟函数(如read_virt)