【Java】Java Socket编程(1)基本的术语和概念

  计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础。那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因。Java语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket)。在开始学习Java Socket之前我们需要先来了解一下基本的术语和概念。

1.计算机网络

  计算机网络由一组通过通信信道(Communication channel)相互连接的机器组成。这些机器被称为:主机(hosts)路由器(routers):

  • 通信信道  ——  是将字节序列从一个主机传输到另一个主机的一种手段(有线、无线(WiFi)等方式)。
  • 主机  ——  作用是运行程序的计算机。
  • 路由器  ——  作用是将信息从一个通信信道传递或转发到另一个通信信道。 

TCP/IP网络通信流程图:

2.分组报文

  • 分组报文  ——  在网络环境中由程序创建和解释的字节序列。

3.协议

  协议相当于相互通信的一种约定,协议规定了分组报文的交换方式和它们包含意义。

  互联网所使用的协议是 TCP/IP 协议,TCP/IP 协议族主要包括:

  • IP 协议(Internet Protocol,互联网协议)
  • TCP 协议(Transmission Control Protocol,传输控制协议)
  • UDP 协议(User Datagram Protocol,用户数据报协议)

  IP协议

  • IP 协议  ——  是TCP/IP协议中唯一属于网络层的协议。将数据从一台主机传输到另一台主机。
  • IP 协议  ——  提供了一种数据服务:每组分组报文都有网络独立处理和分发,类似于信件或包裹通过邮政系统发送一样。
  • IP 协议  ——  是一个"尽力而为"(best-effort)的协议:它试图分发每一个分组报文,在网络传输过程中,偶尔也会发生丢失报文是报文顺序打乱,或者重复发送报文的情况。  

  在IP协议层之上是传输层(transport layer),它提供了两种可选的协议:TCP协议和UDP协议,两种协议都建立在IP层所提供的服务基础上,二者也被称为"端到端传输协议(end-to-end transport protocol)"根据应用程序协议(Application protocol)的不同需求,使用了不同的方式传输数据。二者都有一个共同的功能:寻址。TCP协议和UDP协议使用的地址叫做端口号(port number),是用来区分同一主机不同应用程序的。

   TCP 协议

  TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。TCP协议是一种面向连接(connection oriented)协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接,这涉及两台相互通信的主机的TCP部件间完成的握手消息(handshake message)的交换。

  UDP 协议

  UDP协议并不尝试对IP层产生的错误进行修复,它仅仅简单拓展了IP协议,"尽力而为"的数据服务,使它能够在应用程序之间工作,而不是在主机之间工作。使用UDP协议的应用程序需要对处理报文丢失、顺序混乱等问题做好准备。

4.关于地址

  在TCP/IP协议中,有两部分信息用来定位一个指定的程序:互联网地址(Internet address)和端口号(port number,范围1-65535)。前者由IP协议使用,后者由传输协议(TCP/UDP)对其进行解析。

  互联网地址有二进制数字组成,有两种形式:IPv4(32位)和IPv6(128位)。为了方便使用,两个版本的IP协议有不同的表示方法:

  •   IPv4地址被表示为一组为4个十进制数,每两个数之间用圆点隔开,这种表示方法叫做:点分形式(dotted-quad)。
  •   IPv6地址的16个字节由几组16进制的数字表示,这些十六进制数之间有分号隔开,每组数字分别代表了地址中的两个字节。

  回环地址

  回环地址(loopback address)是被分配的一个特殊的回环接口(loopback interface),回环接口是一种虚拟设备,它的功能只是简单的把发送给它的报文立即返回给发送者。如IPv4中的:127.0.0.1

5.域名系统(Domain Name System,DNS)和本地配置数据库

  DNS是一种分布式数据库,它将向www.baidu.com这样的域名映射到真实的互联网地址和其他信息上。DNS协议允许连接到互联网的主机通过TCP或者UDP协议从DNS数据库获取信息。

  本地配置数据库通常是一种与具体操作系统相关的机制,用来实现本地与互联网地址的映射。  

6.客户端和服务器

  客户端(client)和服务器(server)这两个术语分别代表了两种角色: 

  • 客户端是通信的发起者,而服务器程序则被动等待客户端发起通信,并对其作出响应。
  • 客户端服务器组成了应用程序

7.什么是Socket(套接字)

  Socket(套接字)是一种抽象层,应用程序通过它来发送和接受数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样。

  在TCP/IP协议族中的主要Socket类型为:

  • 流套接字(stream socket):传输层使用TCP协议,提供了一个可信赖的字节流服务
  • 数据报套接字(datagram socket):传输层使用UDP协议,提供了一个"尽力而为"的数据报服务,最长一次可以发送65500个字节的数据。

参考资料:《TCP/IP Socket in Java》

作者:晴天猪

出处:http://www.cnblogs.com/IPrograming

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/IPrograming/archive/2012/03/15/Java_Socket_1.html

【Java】Java Socket编程(1)基本的术语和概念,布布扣,bubuko.com

时间: 2024-12-24 16:09:54

【Java】Java Socket编程(1)基本的术语和概念的相关文章

C# Socket编程(1)基本的术语和概念

计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.C#语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket).在开始学习C# Socket之前我们需要先来了解一下基本的术语和概念. 阅读目录: 1.计算机网络 2.分组报文 3.协议 3.1 IP协议 3.2 TCP协议 3.2 UDP协议 4.网络地址 4.1 回环地址 5.D

【JAVA】Socket 编程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信.这样就有两个Socket了,客户端和服务端各一个. 对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以

基于java的socket编程

#开头的废话#学习java已经半个月了,原本在抠教材里面的字眼时,觉得教材好厚,要看完不知道要到猴年马月去了.突然在网上看到一个教程,里面老师说学编程语言书不用太细看,看个大概,知道里面讲些什么就好,不用全记得,然后你一个劲地编,使劲地编,编的时候不懂再回来看就好了,这是最快的方法.心里一琢磨,还真是这样,根据以前学C语言的情况不就这样吗.所以便加速看,把一些书里介绍的方法,类飞速地浏览过了,刷到网络这一章,觉得socket编程应该是得试一下手,不要只看不做假把式. 此文为原创,转摘请注明转摘自

基于java的socket编程及API解析

一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据. 我们所说的socket 编程,是站在传输层的基础上,所以可以使用 TCP/UDP 协议,但是不能进行访问网页,因为访问网页所需要的 http 协议位于应用层.作为一个应用程序是能实现该层以下的内容,而不能实现在该层之上的内容. 2.socket通讯过程: (

java网络socket编程详解

7.2 面向套接字编程    我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socket的具体工作方式 7.2.1使用套接字实现基于TCP协议的服务器和客户机程序    依据TCP协议,在C/S架构的通讯过程中,客户端和服务器的Socket动作如下: 客户端: 1.用服务器的IP地址和端口号实例化Socket对象. 2.调用connect方法,连接到服务器上. 3.将发送到服务器的IO流填充到IO对象里,比如BufferedReader/PrintWriter

【转】java的socket编程

转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是

Java UDP Socket编程

UDP协议 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接.实际上,UDP协议实现了两个功能: 1)在IP协议的基础上添加了端口: 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据. UDP的Java支持 Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器端都通过DatagramSocket的send()方法和receive()方法来发送和接收数据,用

Java基础—socket编程—UDP发送及接收

简介:在同一主机上测试,同一IP地址,不同的端口,使用UDP发收数据 使用socket编程,通过UDP协议发送数据 需求:使用UDP协议向某IP的某端口发送一条数据 UdpSend.java package com.Train; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.ne

java实现socket编程

客户端 import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class ClientDemo { /** * @param args * @throws IOException * @throws UnknownHostException */ public static void main(Str