ServerSocket与Socket类

TCP套接字协议:

TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢。使用TCP进行连接的时候会有三次握手,之后才建立起服务器与客户端的连接,因为TCP的链接习惯是询问对方机器是否存在,不存在就不会建立连接,存在才会建立连接。

示意图:

ServerSocket类:

在Java中想要使用TCP协议做编写服务端的话,需要使用到ServerSocke类,这个类是TCP协议的。

TCP协议的操作类都在java.net包下放着,ServerSocket类就是服务器端,服务器插座,Socket这个单词就是插座的意思。

Socket类:

同样是TCP协议并与ServerSocket类相对的是Socket类,这个类是作为一个通讯端、客户端的存在。用于去连接服务器端,这个Socket如果是从ServerSocket拿到的对象,那就是与服务器连接的那个Socket,如果是自己创建的Socket对象,那你就是客户端。

在理论上可以有无限个Socket端来连接ServerSocket端,在ServerSocket端上每有一个Socket端来连接,就会创建与之相对的Socket对象。也就是说ServerSocket端上也有Socket对象,每一个Socket就像插座上的插孔一样,连接着通讯端的Socket对象。

示意图:

ServerSocket与Socket类:

ServerSocket类可以编写服务器端,Socket类可以用来编写客户端。创建ServerSocket对象的时候需要声明一个端口号,这样通讯端才能通过端口号去连接。创建Socket对象的时候则需要声明一个IP地址和ServerSocket对象的端口号,这样才能对服务端发出连接请求。在发出连接请求成功连接后,Socket通讯端会创建两个流,一个是InputStream流一个是OutputStream流。同时,ServerSocket服务器端会得到一个Socket对象,然后这个Socket对象也会创建出InputStream流和OutputStream流。

示意图:

上面只是粗略的说一下如何建立的连接,实际上ServerSocket服务器端的Socket对象是通过accept();方法得到的,这个方法监听着声明的端口号。一旦有通讯端来连接,就会创建Socket对象,客户端和服务器端建立连接成功之后就通过InputStream流和OutputStream流来进行交互数据。

完整示意图:

明白了两个类之间的联系后,我们就开始尝试编写一个服务器端吧。我们使用浏览器作为Socket端,因为浏览器也是TCP协议的,所以可以连接到我们编写的服务器端。(提示:如果确定编写的代码无误,但是浏览器却连接不到编写的服务端,可以更换IE浏览器试一下)

代码示例:

运行结果:

浏览器会发送一段浏览器的信息:

我们还可以使用字节流,读取一些漂亮妹子照片的并通过网络流输出到浏览器上,估计很多屌丝们就精神一震了(手动滑稽)。

代码示例:

运行结果:

现在我们已经知道如何编写服务器端,并且知道可以使用浏览器作为客户端去进行连接了,那么接下来使用Socket类进行编写一个客户端,简单的与服务器端交互一下数据。服务器端的编写和上面的第一个示例没有区别,就不过多解释。

客户端则是需要声明一个ip地址和端口号,这个端口号是服务器端的端口号,这点要注意。然后同样的通过流来交互数据,读取或输出数据时,需要看一下服务器端是先读取还是先输出,服务器端先读取的话客户端就需要先编写输出数据的代码,否则反之。关于这个谁先读取或输出是没有规定的,都是根据另一端的编写的代码来决定。

服务器端代码示例:

客户端代码示例:

运行结果:

当有两个结果并且想要两个控制台界面时,可以点击这里,选择NewConsoleView新建控制台:

代码之间的关系示意:

多网卡:

多网卡就是一台计算机中有好几个网卡,一般普通PC电脑有两个网卡,一个物理网卡,一个虚拟网卡。笔记本电脑则一般有三个网卡一个无线网卡,一个物理网卡,一个虚拟网卡。

一般在服务器上有很多个网卡,所以就有很多网线接口,因为有些服务器会需要“三合一网络”,“三合一网络”就是将联通、电信、移动的网线都接入到这台服务器里,那这台服务器就能同时使用三个运营商的网络了。

而且因为服务器机房里一般都是有很多台服务器在进行集群,所以也需要一部分网络接口用于连接内部的集群网络,一部分网络接口则连接通过防火墙之类的安全措施过滤后的外部网络。

多网卡服务器图片:

ServerSocket与Socket类的更多相关文章

  1. 详解 ServerSocket与Socket类

    (请观看本人博文 -- <详解 网络编程>) 目录 ServerSocket与Socket ServerSocket 类: Socket类: ServerSocket与Socket 首先, ...

  2. Socket类 以及 ServerSocket类 讲解

    Socket类 套接字是网络连接的端点,套接字使应用可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的. 为了从一个应用程序向另 ...

  3. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  4. ServerSocket和Socket

    前言 用ServerSocket和Socket做了个Server.Client通信的demo,以及学习下在这个demo过程中用到java.net.java.io包下几个常用的类. Server imp ...

  5. 【Android编程】Java利用Socket类编写Metasploit安卓载荷辅助模块

    /作者:Kali_MG1937 CSDN博客:ALDYS4 QQ:3496925334/ 注意!此文章被作者标记到 黑历史 专栏中,这意味着本篇文章可能存在 质量低下,流水账文,笔法低质 的问题 为了 ...

  6. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

    查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...

  7. PHP socket类

    没事的时候自己封装了一个socket类 功能非常easy和curl功能是一样的 class socketClass{ private $host; private $url; private $err ...

  8. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  9. Socket 类

    构造函数       名称 说明 Socket(AddressFamily, SocketType, ProtocolType) 新实例初始化 Socket 类使用指定的地址族. 套接字类型和协议. ...

随机推荐

  1. 网络编程2之Socket简介和java.net包

    一.Socket 通信链路的端点就被称为"套接字"(英文名Socket) 是提供给应用程序的接口 图文说明Socket Socket通信原理 二.java.net包 Java.ne ...

  2. Java IO流之缓冲流

    一.缓冲流简介 二.BufferedInputStream 三.其他三种缓冲流

  3. 关于combotree的用法总结

    后台: 实体树 public class TreeNode{ private String id; private String text; private String level; private ...

  4. hive报错 Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections,

    学习hive 使用mysql作为元数据  hive创建数据库和切换数据库都是可以的 但是创建表就是出问题 百度之后发现 是编码问题 特别记录一下~~~ 1.报错前如图: 2.在mysql数据库中执行如 ...

  5. Eclipse中如何显示代码行

    方法一 快捷键方式: 按住 Ctrl + F10 选择 show  Line Numbers 方法二 手动操作: Window -- Prefences -- General -- Editors - ...

  6. Win7安装Docker

    系统环境 1. windows 7 旗舰版64位 i5-2450M CPU  8G内存 2.支持“ Hardware Virtualization Technology”,并且,“virtualiza ...

  7. java入门学习笔记之2(Java中的字符串操作)

    因为对Python很熟悉,看着Java的各种字符串操作就不自觉的代入Python的实现方法上,于是就将Java实现方式与Python实现方式都写下来了. 先说一下总结,Java的字符串类String本 ...

  8. guoshiyv 数据结构与算法2-1 线性链式存储

    线性链式存储:   包含两部分:1.存储的单个元素 2.指针,指向下一个的地址 typedef struct() { ElementType Data; struct Node *Next; }Lis ...

  9. js实现点击copy,可兼容

    在实现功能时写的一个小demo,可以实现点击复制内容(任何你需要copy的文字内容data). 经测试,可兼容 chrome, edge, firefox, ie, opera, safari,至于版 ...

  10. IntelliJ IDEA:给web应用提供JSTL支持

    最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...