文档章节

Java Socket应用

于谦老师
 于谦老师
发布于 2017/08/22 08:37
字数 1224
阅读 25
收藏 0

Java Socket应用

两台计算机通过网络进行通信方法

1.唯一的ip地址

2.协议

3.端口号

IP地址

为实现网络中不用计算机之间的通信,每台计算机都必须有一个唯一的一个标识---IP地址

IP地址格式:数字型,如:192.168.0.1(32位的二进制)

IPV4:是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基础的协议。1981年 Jon Postel 在RFC791中定义了IP,Ipv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议) ,卫星链路等等。局域网中最常用的是以太网。

TCP/IP协议

TCP/IP是目前世界上应用最为广泛的协议

是以TCP和IP为基础的不同层析上多个协议的集合

也称为;TCP/IP协议族或TCP/IP协议栈

TCP:TransmissionControl Protocol 传输控制协议

IP:Internet Protocol 互联网协议

TCP/IP模型

端口

1.用于区分不同应用程序

2.端口号范围为0-65535,其中0-1023为系统所保留

3.IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础

Java中的网络支持

InetAddress类

InetAddress类

1.InetAddress类用于标示网络上的硬件资源,表示互联网协议(IP)地址 获取本机的InetAddress实例

InetAddress address=InetAddress.getLocalHost();

System.out.println("计算机名:"+address.getHostName());

  • 通过Inetaddress.getLocalHost()方法获取本地主机实例; 也可通过Inetaddress.getByName()方法,经给定的主机名或IP地址来取得主机实例

InerAddress实例获取:

1、通过主机名和ip地址来获取 。
   InetAddress.getByName("机器名");
   InetAddress.getByAddress(ip地址);
2、也可通过getLocalHost()方法来获取实例。

URL

1.URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址

2.URL由两部分组成:协议名称和资源名称,中间用冒号隔开

3.在java.net包中,提供了URL类来表示URL

锚点:是指同一页面中的不同位置链接。例如,一个很长的页面,在页面的最下方有一个“返回页首”的文字,单击链接后,可以跳转到这个页面最顶端,这就是一种最典型的锚点链接。通过点击命名锚点,能够快速重定向网页特定的位置(比如快速到页首、页尾或者网页中某篇文章处),便于浏览者查看网页内容。类似于我们阅读书籍时的目录页码或章回提示。

使用URL读取网页内容

1.通过URL对象的openStream()方法可以得到指定资源的输入流

2.通过输入流可以读取、访问网络上的数据

Socket简介

Socket通信 1.TCP协议是面向对象连接、可靠的、有序的,以字节流的方式发送数据

2.基于TCP协议实现网络通信的类

客户端的Socket类

服务器端的ServerSocket类

Socket通信实现步骤

1.创建ServerSocket和Socket

2.打开连接到Socket的输入/输出流

3.按照协议对Socket进行读/写操作

4.关闭输入输出流、关闭Socket

客户端步骤:

1.创建客户端Socket,指定服务器地址和端口 Socket socket=new Socket("IP地址","端口号"); 2.获取输出流,向服务器发送信息 OutputStream os=socket.getOutputStream();//字节输出流 PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流 pw.write("用户名:admin;密码:123"); pw.flush(); socket.shutdownOutput();//关闭输出流 //关闭相应的资源 pw.close(); os.close(); socket.close();

应用多线程来实现服务器与多客户端之间的通信

基本步骤 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接 2.客户端创建一个socket并请求和服务器端连接 3.服务器端接收客户端请求,创建socket与该客户建立专线连接 4.建立连接的两个socket在一个单独的线程上对话 5.服务器端继续等待新的连接


服务器线程处理类

public class ServerThread extends Thread
{
  //和本线程相关的socket
  Socket socket=null;
  public ServerThread(Socket socket)
{
  this.socket=socket;
}
//线程执行的操作,响应客户端的请求
public void run()
{
//获取输入流,并读取客户端信息
//获取输出流,反馈信息给客户端
}
}

服务器的修改

Socket socket=null;
//记录客户端的数量
int count=0;
//循环监听等待
while(true)
{
//调用accept()方法开始监听,等待客户端的连接
socket=serverSocket.accept();
//创建一个新的线程
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();
count++;
System.out.println(count);
//获取当前客户端的IP
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}

© 著作权归作者所有

于谦老师
粉丝 2
博文 17
码字总数 24069
作品 0
海淀
产品经理
私信 提问
druid下莫名其妙hold15分钟+。疑是socket timeout超时15分钟后,重建了新连接导致

背景 在应用端通过mybatis的interceptor自定义Plugin拦截Executor, 统计输出sql的执行耗时。 今天生产发生一个很奇怪的问题: 莫名其妙卡顿15分钟+,其后正常返回sql正常结果! 使用druid版本...

noob_fly
03/04
820
0
SpringBoot 远程调试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/yuanlaijike/article/details/90738549 在配合 QA 进行代码测试,以及...

Jitwxs
06/02
0
0
Eclipse远程调试Tomcat

应用场景 通过Java的JPDA远程调试功能将本地源码与远程部署的应用连接起来实现调试,其中程序源码与服务器上发布的编译代码版本要保持一致,保证调试定位准确。调试的过程中,部署在应用服务...

山山山
2014/11/11
44
0
JAVA虚拟机起步-虚拟机调优

JAVA虚拟机起步OutOfMemory问题解决记录。 问题: JAVA虚拟机报错 # java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space? # # Internal Error......

飓风2000
2014/03/01
353
0
JVM Attach实现原理剖析

前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清楚如下三个主要方面的内容。 原发布:我的博客 一...

从精于一开始
2018/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Activity启动模式二

上篇文章Activity启动模式一主要介绍了Activity的四种启动模式,这些启动模式都是在AndroidManifest中进行配置的。除此之外,Android系统还通过Intent类提供了一些标志位,同样可以指定Activ...

ltlovezh
5分钟前
2
0
三原色还原

1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式...

天王盖地虎626
16分钟前
2
0
kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
54分钟前
6
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部