Java Socket总结
- 网络基础
- TCP/IP协议
- TCP/IP是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也称:TCP/IP协议族 或 TCP/IP协议栈
- TCP:Transmission Control Protocol 传输控制协议
- IP:Internet Potocol 互联网协议
- TCP/IP五层模型 (应用层-传输层-网络层-数据链路层-物理层)
- 应用层
- HTTP超文本传输协议
- FTP文件传输协议
- SMTP简单邮件传送协议
- Telnet远程登陆服务
- 应用层
- 端口
- 用于区分不同应用程序
- 端口号范围是 0 ~~ 65525,其中 0 ~~ 1023为系统保留
- IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础
- 常用的协议使用的端口号 http:80 ftp:21 telnet:23
- Java中的网络支持
针对网络通信的不同层次,Java提供的网络功能有四大类- InetAddress(用于标识网络上的硬件资源)
- URL(统一资源定位符,通过URL可以直接读取或写入网络上的数据)
- Sockets(使用TCP协议实现网络通信的Socket相关的类)
- Datagram(使用UDP协议,将数据保存在数据报中,通过网络进行通信)
- TCP/IP协议
- InetAddress类
- InetAddress类代表了一个网络目标地址,包括主机名和数字类型的地址信息。
- 该类有两个子类,Inet4Address和Inet6Address,分别对应了目前IP地址的两个版本。InetAddress
- 实例是不可变的,一旦创建,每个实例就始终指向同一个地址。
- 可以根据IP获取该对象,根据该对象可以获得对应的主机名等等信息
- InetAddress也可能会被用来将IP地址转变为这些地址的域名,这对于分析Web日志是很有用的。InetAddress使得开发者们可以轻松的和域名、IP地址打交道,并且使他们可以不必和DNS服务器进行交互。
- URL(Uniform Resource Locator 统一资源定位符 表示Internet上某一资源的地址)
- URL由两部分组成:协议名称和资源名称,中间用冒号隔开
- 在java.net包中,提供了URL类来表示URL
- 利用一个网址获取该网页内容(爬虫抓取)
public static void printPage(){try {URL url = new URL("http://www.baidu.com");InputStream is = url.openStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String data = br.readLine();while(data != null){System.out.println(data);data = br.readLine();}br.close();isr.close();is.close();} catch (Exception e) {e.printStackTrace();}} }
- TCP编程( Socket 实现 TCP 编程)
- Socket通信
- TCP协议是面向连接、可靠的、有序的,以字节流的方式发送数据
- 基于TCP协议实现网络通信的类
- 客户端的Socket类
- 服务器端的ServerSocket类
- 实现步骤
- 创建ServerSocket和Socket
- 打开连接到Socket的输入/输出流
- 按照协议对Socket进行读/写操作
- 关闭输入输出流、关闭Socket
- Sokect通信模型
- Server(服务器端)
public class Service {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8888);Socket socket = serverSocket.accept();InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String info = null;while((info = br.readLine())!=null){System.out.println("服务器,客户端请求:"+info);}socket.shutdownInput();br.close();isr.close();is.close();socket.close();} catch (Exception e) {e.printStackTrace();}} }
- 建立连接
- 建立服务端监听Socket
- 等待并接收连接请求
- 接收请求后创建Socket
- 开始通道
- InputStream
- OutputStream
- 结束通信
- 关闭Socket及相关资源
- 建立连接
- Client(客户端)
public class Client {public static void main(String[] args) {try {Socket socket = new Socket("localhost",8888);OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);pw.write("用户名:admin;密码:admin");pw.flush();socket.shutdownOutput();pw.close();os.close();} catch (Exception e) {e.printStackTrace();}} }
- 创建连接Socket向服务器发送请求
- OutputStream
- InputStream
- 关闭Socket及相关资源
- Server(服务器端)
- Socket通信
- UDP编程
- UDP编程基础知识点
- UDP协议(用户数据报协议)是无连接、不可靠的、无序的
- UDP协议以数据报作为数据传输的载体
- 进行数据传输时,首先需要将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去
- DatagramPacket:表示数据报包
- DatagramSocket:进行端到端通信的类
- UDP通信模型
- 服务端实现步骤
package org.socket.demo; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPService {public static void main(String[] args) {try {/*** 接收客户端发送过来的数据信息*///1.创建服务器端DataramSocket,指定端口号DatagramSocket datagramSocket = new DatagramSocket(8800);//2.创建数据报,用于接收客户端发送的数据byte[] data = new byte[1024];//创建字节数组,指定接收的数据包的大小DatagramPacket packet = new DatagramPacket(data,data.length);//3.接收客户端发送的数据datagramSocket.receive(packet);//此方法在接收到数据报之前会一直阻塞//读取数据String info = new String(data,0,packet.getLength());System.out.println("我是服务器,客户端说:"+info);/*** 回应客户端的信息*/byte[] data2 = "欢迎您".getBytes();InetAddress inetAddress = packet.getAddress();int port = packet.getPort();DatagramPacket packet2 = new DatagramPacket(data2,data2.length,inetAddress,port);datagramSocket.send(packet2);datagramSocket.close();} catch (Exception e) {e.printStackTrace();}} }
- 创建DatagramSocket,指定端口号
- 创建DatagramPacket,就是创建数据报,用来接收客户端发送的数据
- 接收客户端发送的数据信息
- 读取数据
- 客户端实现步骤
package org.socket.demo; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPClient {public static void main(String[] args) {//1.定义服务器的地址、端口号、数据try {/*** 向服务器端发送请求*/InetAddress address = InetAddress.getByName("localhost");int port = 8800;byte[] data = "用户名:admin;密码:123".getBytes();//2、创建数据报,包含发送的数据信息DatagramPacket packet = new DatagramPacket(data, data.length, address, port);//3、创建DatagramSocket对象DatagramSocket socket = new DatagramSocket();socket.send(packet);/*** 接收服务器端发送过来的数据信息*/byte[] data2 = new byte[1024];//创建字节数组,指定接收的数据包的大小DatagramPacket packet2 = new DatagramPacket(data2,data2.length);//3.接收客户端发送的数据socket.receive(packet2);//此方法在接收到数据报之前会一直阻塞String info = new String(data2,0,packet2.getLength());System.out.println("我是客户端,服务器说:"+info);socket.close();} catch (Exception e) {e.printStackTrace();}} }
- 定义发送信息
- 创建DatagramPacket,包含将要发送的信息
- 创建DatagramSocket
- 发送数据
- 服务端实现步骤
- UDP编程基础知识点
- Socket总结
- 是否关闭输入/输出流
- 对于同一个Socket,如果关闭了输出流,则与该输出流关联的socket也会被关闭,所以一般不用关闭流,直接关闭Socket即可
- 多线程的优先级
- 未设置优先级可能会导致运行时速度非常慢,可降低优先级提高运行速率
- 使用TCP通信传输对象
ObjectOUTputStream, writeObject()---->传输的对象必须实现序列化接口,implements Serializable,否则报异常 Socket socket = new Socket("localhost",8888); OutputStream os = socket.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); User user = new User("amdin","123"); oos.writeObject(user); socket.shutdownOutput();
ObjectInputStream,readObject() InputStream is = socket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); User user = (User)ois.readObject(); System.out.println(user.getUsername()+"\t"+user.getPassword()); socket.shutdownInput();
- soket编程传递文件
- 是否关闭输入/输出流
- 资料文献书籍
- IP地址:《探索Linux的网络世界》
转载于:https://www.cnblogs.com/myfaith-feng/p/9665979.html
Java Socket总结相关推荐
- flex java socket通信
引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...
- Java Socket发送与接收HTTP消息简单实现
在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构 ...
- Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...
此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...
- java socket相关的timeout
1 java socket的两个timeout 一个是connect timeout,即建立连接的timeout,另外一个是so timeout,是读取数据的timeout.这两个timeout都是因 ...
- Java Socket传输数据的文件系统介绍
转自:http://developer.51cto.com/art/201003/189963.htm Java Socket传输数据在进行的时候有很多的事情需要我们不断的进行有关代码的学习.只有不断 ...
- Java Socket编程 - 基于TCP方式的二进制文件传输
一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...
- Java socket 重要参数
Java Socket的api可能很多人会用,但是Java Socket的参数可能很多人都不知道用来干嘛的,甚至都不知道有这些参数. backlog 用于ServerSocket,配置ServerSo ...
- 基于Java的RDMA高性能通信库(六):SDP - Java Socket Direct Protocol
目录 1.Java网络编程和套接字API的历史 2.InfiniBand 高速网络通信技术 3. Java 网络协议栈API 4.Java 7 SDP 远程直接内存存取(RDMA) 4.1 Java7 ...
- 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA
目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...
- Java Socket实战之三:传输对象
转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...
最新文章
- A股暴跌,户均亏2万!刚写好的辞职信又撕了……
- 深度学习vs机器学习 | 这些本质区别你知道多少?
- 云端迁移需谨遵四大关键步骤
- JAVA面向对象的总结(函数重载与数组)
- AXURE RP8实战手册(完整版)
- css_oneday
- JDK 8 Javadoc调整了方法列表
- java基础集合数组间的转换(java集合五)
- 从统计代码来谈JS加载的优化
- Cocos2d-x学习之---关于CCScrollView
- Jquery实现定时器实例
- 关于编写过程中进制之间的转换
- matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf
- 非常不错的Coding-iOS开源项目
- 基础网络函数介绍及其Cpp实例(C++)
- DRBD 管理、故障处理部分
- 图像语义分割(11)-BiSeNet:用于实时语义分割的双向分割网络
- 拓端tecdat|R语言中的生存分析Survival analysis晚期肺癌患者4例
- Same Tree - LeetCode
- 此版本的IDM不支持该类下载,请尝试将IDM更新至最新版本。
热门文章
- L2-004 搜索树判断 (25 point(s))
- 同事发来的文件是个html,逮到一个疑是感染html,htm,网页文件的木马
- python基于scipy拟合构建所需统计分析模型,可视化分析展示
- Python实现样本类别的可视化(绘制饼图,展示各类别样本的比例)
- php获取文本中的大写字母个数,php字符串英文文本中大写字母,小写字母,空格,标点符号的个数统计...
- 2021-06-28操作表单
- java 打印数据_Java 中的打印流
- halcon显示坐标_机器视觉之halcon入门(10)-一文弄懂halcon例程:color_fuse.hdev
- 区块链 Fisco bcos 智能合约(12)-Solidity的高级特性
- Kubernetes部署软件应用的步骤思路