本文目录一览:
- 1、java中的socket是什么意思?
- 2、在javasocket网络编程中,开发基于udp协议的程序使用的套接字有哪些
- 3、JAVA Socket 底层是怎样基于TCP/IP 实现的
- 4、JAVA中什么是套接字???
- 5、Java网络编程如何初始化套接字
- 6、JAVA 套接字
java中的socket是什么意思?
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。\x0d\x0a以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。\x0d\x0a重要的Socket API:\x0d\x0ajava.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。\x0d\x0a. Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。\x0d\x0a. getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。\x0d\x0a. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。\x0d\x0a注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。\x0d\x0a2ServerSocket类例子编辑\x0d\x0a\x0d\x0apackage com.lanber.socket;\x0d\x0aimport java.io.DataInputStream;\x0d\x0aimport java.io.DataOutputStream;\x0d\x0aimport java.io.IOException;\x0d\x0aimport java.net.ServerSocket;\x0d\x0aimport java.net.Socket;\x0d\x0apublic class ServerDemo {\x0d\x0a/**\x0d\x0a* 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,\x0d\x0a* 而后才可以向客户端发送信息,否则将会有运行时出错。\x0d\x0a* @param args\x0d\x0a*/\x0d\x0apublic static void main(String[] args) {\x0d\x0aServerSocket ss = null;\x0d\x0atry {\x0d\x0ass = new ServerSocket(8888);\x0d\x0a//服务器接收到客户端的数据后,创建与此客户端对话的Socket\x0d\x0aSocket socket = ss.accept();\x0d\x0a//用于向客户端发送数据的输出流\x0d\x0aDataOutputStream dos = new DataOutputStream(socket.getOutputStream());\x0d\x0a//用于接收客户端发来的数据的输入流\x0d\x0aDataInputStream dis = new DataInputStream(socket.getInputStream());\x0d\x0aSystem.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());\x0d\x0a//服务器向客户端发送连接成功确认信息\x0d\x0ados.writeUTF("接受连接请求,连接成功!");\x0d\x0a//不需要继续使用此连接时,关闭连接\x0d\x0asocket.close();\x0d\x0ass.close();\x0d\x0a} catch (IOException e) {\x0d\x0ae.printStackTrace();\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a3客户端的例子编辑\x0d\x0apackage com.lanber.socket;\x0d\x0aimportjava.io.DataInputStream;\x0d\x0aimport java.io.DataOutputStream;\x0d\x0aimportjava.io.IOException;\x0d\x0aimport java.io.OutputStream;\x0d\x0aimport java.net.Socket;\x0d\x0aimport java.net.UnknownHostException;\x0d\x0apublic class ClientDemo {\x0d\x0a/**\x0d\x0a* @param args\x0d\x0a*/\x0d\x0apublic static void main(String[] args) {\x0d\x0aSocket socket = null;\x0d\x0atry {\x0d\x0asocket = new Socket("localhost",8888);\x0d\x0a//获取输出流,用于客户端向服务器端发送数据\x0d\x0aDataOutputStream dos = new DataOutputStream(socket.getOutputStream());\x0d\x0a//获取输入流,用于接收服务器端发送来的数据\x0d\x0aDataInputStream dis = new DataInputStream(socket.getInputStream());\x0d\x0a//客户端向服务器端发送数据\x0d\x0ados.writeUTF("我是客户端,请求连接!");\x0d\x0a//打印出从服务器端接收到的数据\x0d\x0aSystem.out.println(dis.readUTF());\x0d\x0a//不需要继续使用此连接时,记得关闭哦\x0d\x0asocket.close();\x0d\x0a} catch (UnknownHostException e) {\x0d\x0ae.printStackTrace();\x0d\x0a} catch (IOException e) {\x0d\x0ae.printStackTrace();\x0d\x0a}\x0d\x0a}\x0d\x0a}
在javasocket网络编程中,开发基于udp协议的程序使用的套接字有哪些
一、 填空题
___ IP地址____用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
统一资源定位符URL是指向互联网“资源”的指针,由4部分组成:协议、存放资源的主机域名、__端口___和资源路径和文件名。
URL 是统一资源定位器的简称,它表示Internet上某一资源的地址。
在Socket编程中,IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用 端口 来区分这些应用程序。
在Java Socket网络编程中,开发基于TCP协议的服务器端程序使用的套接字是 ServerSocket 。
在Java Socket网络编程中,开发基于UDP协议的程序使用的套接字是 DatagramSocket 。
二、 选择题
1.以下协议都属于TCP/IP协议栈,其中位于传输层的协议是(AD)。(选择二项)
A TCP
B.HTTP
C.SMTP
D.UDP
2.以下协议中属于TCP/IP协议栈中应用层协议的是(A)。(选择一项)
A HTTP
B.TCP
C.UDP
D.IP
3.以下说法中关于UDP协议的说法正确的是(AD)。(选择二项)
A.发送不管对方是否准备好,接收方收到也不确认
B.面向连接
C.占用系统资源多、效率低
D.非常简单的协议,可以广播发送
4.在基于TCP网络通信模式中,客户与服务器程序的主要任务是(BC)。(选择二项)
A 客户程序在网络上找到一条到达服务器的路由
B.客户程序发送请求,并接收服务器的响应
C.服务器程序接收并处理客户请求,然后向客户发送响应结果
D.如果客户程序和服务器都会保证发送的数据不会在传输途中丢失
5.在Java网络编程中,使用客户端套接字Socket创建对象时,需要指定(A)。(选择一项)
A 服务器主机名称和端口
B.服务器端口和文件
C.服务器名称和文件
D.服务器地址和文件
6.ServerSocket的监听方法accept( )方法的返回值类型是(A )。(选择一项)
A.Socket
B.Void
C.Object
D.DatagramSocket
7.Java UDP Socket编程主要用到的两个类是(BD)。(选择二项)
A UDPSocket
B.DatagramSocket
C.UDPPacket
D.DatagramPacket
8.在使用UDP套接字通信时,常用(D)类把要发送的信息打包。(选择一项)
A String
B.DatagramSocket
C.MulticastSocket
D.DatagramPacket
三、 判断题
1. Socket是传输层供给应用层的编程接口,是应用层与传输层之间的桥梁 。( T )
2. TCP/IP传输控制协议是Internet的主要协议,定义了计算机和外设进行通信的规则。TCP/IP网络参考模型包括七个层次:应用层、会话层、表示层、传输层、网络层、链路层和物理层。( F )
3. TCP协议一种面向连接的、可靠的、基于字节流的通信协议 。HTTP、FTP、TELNET、SMTP 都是基于TCP协议的应用层协议。( T )
4. UDP协议是一种面向无连接的、可靠的、基于字节流的传输层通信协议,该协议占用系统资源多、效率较低。( F )
四、 简答题
1.TCP/IP协议栈中,TCP协议和UDP协议的联系和区别?
2.简述基于TCP的Socket编程的主要步骤。提示:分别说明服务器端和客户端的编程步骤。
3.简述基于UDP的Socket编程的主要步骤。提示:分别说明服务器端和客户端的编程步骤。
五、 编码题
1.使用基于TCP的Java Socket编程,完成如下功能:
1) 要求从客户端录入几个字符,发送到服务器端。
2) 由服务器端将接收到的字符进行输出。
3) 服务器端向客户端发出“您的信息已收到”作为响应。
4) 客户端接收服务器端的响应信息。
提示:
服务器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);
客户端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
JAVA Socket 底层是怎样基于TCP/IP 实现的
首先必须明确:TCP/IP模型中有四层结构: 应用层(Application Layer)、传输层(Transport Layer)、网络层(Internet Layer
)、链路层(LinkLayer)
其中Ip协议(Internet Protocol)是位于网络层的,TCP协议时位于传输层的。通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络。Ip协议只保证计算机能够接收和发送分组数据。当计算机要和远程的计算机建立连接时,TCP协议会让他们建立连接:用于发送和接收数据的虚拟电路。
套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA
有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包,即ServerSocket不能接收实际的数据包。
套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的服务接口,或者说套接字socket是TCP的应用编程接口API,通过它应用层就可以访问TCP提供的服务。
在JAVA中,我们用 ServerSocket、Socket类创建一个套接字连接,从套接字得到的结果是一个InputStream以及OutputStream对象,以便将连接作为一个IO流对象对待。通过IO流可以从流中读取数据或者写数据到流中,读写IO流会有异常IOException产生。
JAVA中什么是套接字???
你打电话需要有电话或手机吧?套接字就是手机。
你打的,你就是主叫方,对方就是被叫方。那么你需要一个Socket,对方需要一个ServerSocket。
被叫方有多个号。他得选中一个号工作,这叫绑定。在套接字上,是绑定到端口。
对方需要开机才能接听电话。那他就得先侦听。ServerSocket的accept()就是开始侦听,并有来电时接听。
Java网络编程如何初始化套接字
不同的构造方法不仅带的参数不同,所具有的意义也不一样。下面分别解析这两个类的实例初始化过程。 ServerSocket 实例的初始化 ServerSocket 类提供了四个构造器: public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException public Socket() public Socket(Proxy proxy) 带参构造器用来创建已绑定的服务器套接字,也就是说构造成功后它就已经开始侦听指定的端口,且能够调用 accept() 方法来接受客户端连接。默认构造器则会创建未绑定的服务器套接字,构造成功后必须手动将其绑定到一个本地地址才能用,在绑定之前可以进行一些选项配置。 带参构造器 总的来说,带参构造器提供了三个参数: port 指定该服务器套接字所要侦听的本地端口。如果为 0,则由系统自动分配一个端口号,这必须以另外的方式让客户端获取端口号。 backlog 这个名词目前还没有合适的译名。底层系统的 TCP 实现会维护一个连接队列,该队列缓存了已被 TCP 处理完毕,但还没有被服务器套接字接受的客户端连接。一旦某个连接被接受(通过调用 accept() 方法),它就会被从队列中移除。backlog 参数就用于指定队列的最大长度,默认值为 50,但这个值只是一个建议,底层系统可能根据需要自动调整。如果队列满了,则其行为是平台相关的:微软的 WINSOCK 会拒绝新的连接,其他实现则什么都不做。严格地说,微软没有遵守规范,破坏了游戏规则…… bindAddr 一台机器可能会有多个本地 IP 地址,例如同时使用多块网卡。使用其他两个带参构造器时,该参数为 null,服务器套接字会在所有的本地 IP 地址(0.0.0.0 或 ::0)上侦听。如果希望只侦听一个地址,则可使用该参数。 默认构造器 如果使用默认构造器,在绑定地址前,还可以做些配置。绑定操作由两个 bind 方法定义,参数类似于带参构造器。配置项包括以下方面(都必须在绑定前配置): 设置是否重用本地地址 该选项由 setReuseAddress(boolean on) 方法配置,对应底层系统的 SO_REUSEADDR 套接字选项。JDK 没有定义该选项的默认值。如果该选项为 false,则在关闭 TCP 连接时,为了保证可靠性,该连接可能在关闭后的一段时间(大约两分钟)内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态),这段时间里无法将新建的服务器套接字绑定到同一个地址。在开发阶段,服务器可能不断重启,打开改选项会非常有用。 设置接收缓冲区大小 该选项由 setReceiveBufferSize(int size) 方法配置,对应底层系统的 SO_RCVBUF 套接字选项,单位是字节。《RFC 1323 - TCP Extensions for High Performance》将缓冲区大小定义为 64KB。该选项只是一个建议值,底层系统可能根据需要自行调整。 设置超时值 该选项由 setSoTimeout(int timeout) 方法配置,对应底层系统的 SO_TIMEOUT 套接字选项,单位是毫秒。默认值为 0。该选项影响 accept 方法的阻塞时间长度,如果超时将引发 SocketTimeoutException。如果设为 0,则表示永不超时。 设置性能首选项 性能首选项包括连接时间、延迟和带宽三个选项,由 setPerformancePreferences(int connectionTime, int latency, int bandwidth) 方法配置。这三个数值分别表示短连接时间、低延迟和高带宽的相对重要性,数值越大则越重要;其各自的绝对值没有意义。该方法的初衷是为了让 Java 能在用非 TCP/IP 实现的套接字环境下工作得更好,某些需要对网络进行调优的程序也可以将这三个首选项作为配置参数提供给用户。 Socket 实例的初始化 Socket 类提供了六个公共构造器(已过时的除外): public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException public Socket() public Socket(Proxy proxy) 前四个构造器创建已连接的客户端套接字,也就是说构造的时候就会去连接服务器。前两个构造器需要提供服务器的地址和端口作为参数,本地地址和端口由系统自动分配;后两个允许手动指定本地地址和端口,但极少使用。后两个构造器创建未连接的套接字,创建后需要调用 connect 方法手动连接,连接之前可以做一些配置。最后一个构造器接受一个代表代理服务其的 Proxy 对象,JDK 支持 HTTP 和 SOCKS(V4 或 V5)两种代理类型。 连接前的配置 在连接前,客户端套接字不仅像服务器套接字那样可以设置是否重用本地地址、缓冲区大小、超时值和性能首选项,还能够配置以下各项(都必须在连接前配置): 设置是否保持活跃 该选项由 setKeepAlive(boolean on) 方法配置,对应底层系统的 SO_KEEPALIVE 套接字选项。默认值为 false。如果打开该选项,则套接字会定期自动发送保持活跃的探测性消息,类似于心跳检测。根据《RFC 1122 - Requirements for Internet Hosts》的规定,保持活跃机制只是 TCP 的一个可选功能,如果支持的话,默认必须为 false,而且这种机制默认在成功建立连接后,且连续两小时没有数据传输的情况下才会被激活。从另一方面来看,通过套接字的 I/O 操作完全可以知道连接是否还有效,所以该选项的实用价值不大。 设置是否收发带外数据 该选项由 setOOBInline(boolean on) 方法配置,对应底层系统的 SO_OOBINLINE 套接字选项。默认值为 off。带外数据(Out-of-band Data)也叫做紧急数据,表示数据很重要,需要使用不同于发送普通数据的一个专用通道来发送。打开该选项后,就可以调用 sendUrgentData(int data) 方法发送一个字节的紧急数据。JDK 对带外数据只提供了有限支持,紧急数据将会和普通数据一起被收到,并且无法自动区分。该选项对应用开发人员意义不大。 设置是否从容关闭连接 该选项由 setSoLinger(boolean on, int linger) 方法配置,对应底层系统的 SO_LINGER 套接字选项。默认为 false。该选项只会影响套接字的关闭,其中的 linger 参数表示超时时间,单位为秒。如果打开改选项:如果将 linger 设为 0,则关闭套接字的时候,未发送的数据会被丢弃,且另一端会出现连接被同位体重置的异常;如果 linger 非 0,则关闭套接字的线程将被阻塞,直到数据全部发送或超时,超时后的行为与底层系统相关,JDK 无法控制。如果关闭该选项,则套接字正常关闭,数据也会全部发送。由于底层实现的差异性,不提倡应用开发人员打开该选项。 设置是否延迟发送数据 该选项由 setTcpNoDelay(boolean on) 方法配置,对应底层系统的 TCP_NODELAY TCP 选项。默认值为 off。打开该选项将禁用 Nagle 算法,TCP 包会立即发送;关闭该选项则会启用 Nagle 算法,多个较小的 TCP 包会被组合成一个大包一起发送,虽然发送延迟了,但有利于避免网络拥塞。默认为 false。该选项对实时性很强的程序可能有用,但一般的程序不需要关心。 设置流量类别 该选项由 setTrafficClass(int tc) 方法配置,对应底层系统的“流量类别”套接字属性。该选项用于向网络(例如路由器)提示从该套接字发送的包需要获取哪些服务类型,对本地 TCP 协议栈没有影响。IPv4 和 IPv6 分别定义了多个不同的值,例如 IPv4 将 0x08 定义为最大吞吐量,0x10 定义为最小延迟,等等。可以用或运算将多个值合并为一个选项。该选项用来调整性能,需要根据实际情况设置。由于只是建议值,可能被网络忽略。
JAVA 套接字
套接字英文翻译就是Socket,就好像CSS大家不会叫级联样式表一样,大家也很少吧Socket叫做套接字接口。
至于端口是硬件概念,接口是软件概念。接口是不同的程序(或类)访问同一个功能所设定的一种规范,最好理解的接口怕就是电源插座,无论是空调还是吸尘器都通用接口。至于端口是网络连接时连接的点,比如IP地址后面都要有端口,就好像你去一个楼里面找人必须有房间号一样。