文档章节

ServerSocket与Socket类

凯哥学堂
 凯哥学堂
发布于 2017/07/17 18:54
字数 1368
阅读 1
收藏 0
点赞 0
评论 0

ServerSocket与Socket类

TCP套接字协议:

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

示意图:

image

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对象。

示意图:

image

ServerSocket与Socket类:

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

示意图:

image

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

完整示意图:

image

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

代码示例:

image

运行结果:

image

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

image

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

代码示例:

image

运行结果:

image

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

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

服务器端代码示例:

image

客户端代码示例:

image

运行结果:

image

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

image

image

代码之间的关系示意:

image

多网卡:

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

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

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

多网卡服务器图片:

image

© 著作权归作者所有

共有 人打赏支持
凯哥学堂
粉丝 10
博文 285
码字总数 255922
作品 0
东城
程序员
Java语音Socket接口用法详解

Socket接口用法详解 在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客...

超人学院 ⋅ 2016/07/22 ⋅ 0

Android TCP socket通信

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/74896575 之前做过的一个局域网内TCP通信、聊天的demo(当然不是局域网也可以进行通信,刚试了一下可以的),周日整理...

VNanyesheshou ⋅ 2017/07/09 ⋅ 0

聊聊JAVA网络编程

什么是网络编程 敲黑板,划重点:网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 说白了,网络编程要涉及以下几点:1. 串口交互 2. 网络传输协议 3. IO传输...

牧师-Panda ⋅ 2016/09/10 ⋅ 0

socket网络编程

1、概述 2、socket 3、socket分类 4、socket类的构造方法 5、socket常用方法 6、ServerSocket类构造方法 7、ServerSocket类常用方法...

学而时习之 ⋅ 2015/03/11 ⋅ 0

java socket 编程connection reset

在java socket 编程的练习中,我建了两个类,服务端和客户端; 我遇到这样一个问题。 下面是服务器端输入的内容。 println class just do it please study hard, day day up. Hope happiness...

Jwindy ⋅ 2012/03/12 ⋅ 2

ServerSocket与Socket

ServerSocket中常用的构造函数及方法 构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对...

sanyu0302 ⋅ 2014/03/07 ⋅ 0

Socket——基于TCP通信的实现

TCP协议是面向连接、可靠的、有序的,以字节流的方式发送数据。 基于TCP实现网络通信的类: 客户端Socket类 服务器端的ServerSocket类 通信实现步骤: (1).创建ServerSocket和Socket (2)...

奔跑吧代码 ⋅ 2015/09/02 ⋅ 0

Java socket网络编程

1,网络基础和软件编程 软件编写人员不需要了解太多的网络知识(基础还是需要的);软件编写人员主要抓住几点就可以做网络编程; 1,信息传输都是0和1的传输; 2,信息传输需要遵照网络协议;...

天呀鲁哇 ⋅ 2015/04/03 ⋅ 0

java 网络编程内容

Java 网络编程: 1、URL、URLConnection、Socket 2、IP:Internet Protocol,用32位长度(4个字节)的二进制数据。 3、IP地址分为五类 A类 政府机构 1.0.0.1 --- 126.255.255.254 B类 中等规模...

醉风林天 ⋅ 2017/05/10 ⋅ 0

Java网络学习笔记4:ServerSocket用法

ServerSocket的构造方法有以下几种重载形式: ServerSocket() throws IOException ServerSocket( int port) throws IOException ServerSocket( int port, int backlog ) throws IOException ......

牧羊人Berg ⋅ 2015/11/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部