ServerSocket与Socket类
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类的更多相关文章
- 详解 ServerSocket与Socket类
(请观看本人博文 -- <详解 网络编程>) 目录 ServerSocket与Socket ServerSocket 类: Socket类: ServerSocket与Socket 首先, ...
- Socket类 以及 ServerSocket类 讲解
Socket类 套接字是网络连接的端点,套接字使应用可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的. 为了从一个应用程序向另 ...
- java网络编程ServerSocket类 和Socket类的常用构造方法及其方法
Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...
- ServerSocket和Socket
前言 用ServerSocket和Socket做了个Server.Client通信的demo,以及学习下在这个demo过程中用到java.net.java.io包下几个常用的类. Server imp ...
- 【Android编程】Java利用Socket类编写Metasploit安卓载荷辅助模块
/作者:Kali_MG1937 CSDN博客:ALDYS4 QQ:3496925334/ 注意!此文章被作者标记到 黑历史 专栏中,这意味着本篇文章可能存在 质量低下,流水账文,笔法低质 的问题 为了 ...
- 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)
查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...
- PHP socket类
没事的时候自己封装了一个socket类 功能非常easy和curl功能是一样的 class socketClass{ private $host; private $url; private $err ...
- socket系列之客户端socket——Socket类
假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...
- Socket 类
构造函数 名称 说明 Socket(AddressFamily, SocketType, ProtocolType) 新实例初始化 Socket 类使用指定的地址族. 套接字类型和协议. ...
随机推荐
- 基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现
记得从高中上课时经常偷偷的和同学们使用qq进行聊天,那时候经常需要进行下载qq,但是当时又没有那么多的流量进行下载,这就是一个很尴尬的事情了,当时就多想要有一个可以进行线上聊天的网站呀,不用每次痛苦的 ...
- SQLalchemy模块用法
安装 pip install sqlalchemy #!/usr/bin/env python # -*- coding:utf-8 -*- # 加载模块 from sqlalchemy.ext.de ...
- 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- Asp.Net Core-----简介与安装
Asp.Net Core简介 ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联 ...
- Android上解析Json格式数据
package com.practice.json; import org.json.JSONArray; import org.json.JSONException; import org.json ...
- python——根据电子表格的数据自动查找文件
最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力. 经理最近又布置了一个很繁琐的任务给我:有一项很重大的项目做完了,但是要过审计(反正就是类似的审批之类的事情) ...
- 并行模式库PPL应用实战(一):使用task类创建并行任务
自 VS2010 起,微软就在 CRT 中集成了并发运行时(Concurrency Runtime),并行模式库(PPL,Parallel Patterns Library)是其中的一个重要组成部分. ...
- MYSQL更改root password时遇到Access Denied的解决办法
今天在公司虚拟机上装MYSQL之后需要修改root password,然而遇到这样的错误: Access denied for user 'root'@'localhost' (using passw ...
- VMware安装CentOS 提示:已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。解决方案
安装虚拟机遇到错误: 在网上查了查资料,发现CPU支持VT技术的就能支持vmware中安装64位虚拟机. 以下是操作步骤: 1)到网上下载一个securable.exe,测试以下机器是否支持VT. l ...
- IntelliJ IDEA:给web应用提供JSTL支持
最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...