网络编程java
网络编程
1.网络编程概述
(1).C/S结构:指客户端与服务端结构,常见程序QQ;
(2).B/S结构:指浏览器和服务器的结构;
2.网络编程的三要素:
*IP地址
*端口号
*通信协议(UDP/TCP)
*IP地址类(InetAddress类)
一个IP地址就对应一个InetAddress类的对象。
InetAddress类使用静态方法
(1).获得本地主机的IP地址对象
InetAddress ip = InetAddress.getLocalHost();
ip.getHostName();获取主机名
ip.getHostAddress();获得ip地址字符串
根据IP地址字符串或主机名获得IP地址对象
InetAddress ip02 = InetAddress.getByName("ip地址");
UDP协议(用户数据包协议)
1.UDP协议的特点:
*面向无连接协议
* 只管发送,不确认对方是否收到。
* 基于数据包(报)进行数据传输。
* 发送数据大小限制在64k以内。
* 因为面向无连接,速度快但不可靠
2.UDP使用场景
* 即时通讯(QQ,微信,陌陌.....)
* 在线视频
* 语言通话
3.用法:
*发送端
(1).创建数据包对象
DatagramPacket dp = new DatagramPacket(要发送的内容,长度,接收端的ip地址,端口号 );
(2).创建发送端的发送对象
DatagramSocket ds=new DatagramSocket();
ds.send(dp);发送数据包
ds.close();关闭资源
*接收端
(1).创建接收端的Socket对象
DatagramSocket ds=new DatagamSocket(端口号);
// 创建字节数组
byte[] buf = new byte[1024];
// 创建数据包对象
DatagramPacket dp = new DatagramPacket(buf,buf.length);
// 接收数据包
ds.receive(dp);
// 获得实际接收内容的长度
int len = dp.getLength();
// 输出内容
System.out.println(new String(buf,0,len));
// 获得发送端的IP和端口号
String sendIP = dp.getAddress().getHostAddress();
int sendPort = dp.getPort();
System.out.println("sendIP = " + sendIP);
System.out.println("sendPort = " + sendPort);
TCP协议(传输控制协议)
1.TCP协议的特点
* 面向连接的协议。
* 通过三次握手建立连接,形成数据传输通道。
* 通过四次挥手断开连接
* 基于IO流进行数据传输
* 传输数据大小没有限制
* 因为面向连接,速度慢但可靠
2.TCP协议使用场景
* 文件上传和下载
* 邮件发送和接收
* 远程登录
TCP协议通讯相关的两个类
* Socket
* 客户端Socket
* 一个该类的对象就代表一个客户端程序
* ServerSocket
* 服务器端Socket
* 一个该类的对象就代表一个服务器程序
Socket类构造方法
* Socket(String host, int port)
* 根据服务器IP地址和端口号创建客户端Socket对象
* 一旦执行该方法就会立即连接服务器,如果连接失败直接抛异常。
* host:服务器端IP地址
* port:服务器端的端口号
Socket类常用方法
* OutputStream getOutputStream(); 获得字节输出流对象
* InputStream getInputStream(); 获得字节输入流对象
用法:
客户端
// 根据服务器IP地址和端口号创建客户端Socket对象
Socket socket = new Socket("192.168.106.45", 8888);
// 要发送的内容
String content = "约吗,TCP服务器端";
// 获得字节输出流对象
OutputStream out = socket.getOutputStream();
// 往服务器端输出数据
out.write(content.getBytes());
// 获得字节输入流对象
InputStream in = socket.getInputStream();
// 创建字节数组:用来存储服务器返回的数据
byte[] buf = new byte[1024];
// 读取服务器端返回的数据
int len = in.read(buf);
System.out.println("len = " + len);
System.out.println(new String(buf,0,len));
// 关闭Socket断开连接
socket.close();
服务端
ServerSocket类构造方法
* ServerSocket(int port)
* 根据指定的端口号创建服务器Socket对象
* 相当于开启一个服务器
ServerSocket类常用方法
* Socket accept();
* 等待客户端连接并获得与客户端关联的Socket
* 是一个阻塞方法,如果没有客户端连接则当前线程的代码无法继续运行。
用法;// 根据指定的端口号创建服务器Socket对象
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("开启服务器......");
// 等待客户端连接并获得与客户端关联的Socket
Socket socket = serverSocket.accept();
// 获得字节输入流对象
InputStream in = socket.getInputStream();
// 创建字节数组:用来存储客户端发送过来的数据
byte[] buf = new byte[1024];
// 读取客户端发送的数据
int len = in.read(buf);
System.out.println("len = " + len);
System.out.println("接收到的数据 = " + new String(buf,0,len));
// 获得字节输出流对象
OutputStream out = socket.getOutputStream();
// 往客户端输出数据
out.write("不约而同".getBytes());
// 关闭服务器:在实际开发中服务器一般是不关闭的。
serverSocket.close();
网络编程java的更多相关文章
- 网络编程-Java中的Internet查询
前提 在深入理解URL.URI等概念,或者学些Socket相关的知识之,有必要系统理解一下Internet相关的一些基础知识. Internet地址 连接到Internet(因特网)的设备称为节点(n ...
- C++网络编程 Java网络编程
C++ MFC C++ STL C++ 模板 C++ DLL C++ OpenGL C++ OSG C++ GIS (GRASS QGIS POSTGRE GDAL/OGR) ____________ ...
- Java - 网络编程完全总结
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...
- 【转载】Java 网络编程
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...
- Java学习:网络编程总结
Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...
- day05 Java网络编程socket 与多线程
java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...
- 自定义异常、Java网络编程
day04 throw关键字 throw用来对外主动抛出一个异常,通常下面两种情况我们主动对外抛出异常: 1:当程序遇到一个满足语法,但是不满足业务要求时,可以抛出一个异常告知调用者. 2:程序执行遇 ...
- javaSE学习笔记(16)---网络编程
javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
随机推荐
- IP地址和int互转
/** * @author: yqq * @date: 2019/5/8 * @description: ip地址与int之间互换 * https://mp.weixin.qq.com/s?__biz ...
- 搭建自己的技术博客系列(五)hexo博客接入busuanzi插件,展示访问量和网站运行时间
busuanzi计数脚本 busuanzi官方指引 一.安装脚本(必选) 要使用不蒜子必须在页面中引入busuanzi.js,目前最新版如下. 不蒜子可以给任何类型的个人站点使用,如果你是用的hexo ...
- SRAM和DRAM的区别
一.浅谈关于SRAM和DRAM的区别:https://www.cnblogs.com/nano94/p/4014082.html. 二.ROM.RAM.DRAM.SRAM和FLASH的区别,转自:ht ...
- 面试官:服务器安装 JDK 还是 JRE?可以只安装 JRE 吗?
前些日子有知友面试时被问到如题所示的问题,由于他之前没有准备到这些最最基础的知识,没有考虑过这个问题,所以被问到时竟一脸萌币,回答的不是很好.这道题主要考的是对 Java 基础知识的了解,有些同学可能 ...
- NOIP2002 1.级数求和
这题目...... 题目:已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K.现给出一个整数K(1<=k<=15),要求计算出一个最小的n: ...
- 三、SpringBoot 整合mybatis 多数据源以及分库分表
前言 说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程.但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现.我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接 ...
- RDD基本操作之Action
Action介绍 在RDD上计算出来一个结果 把结果返回给driver program或保存在文件系统,count(),save 常用的Action reduce() 接收一个函数,作用在RDD两个类 ...
- 单线程Redis性能为何如此之高?
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...
- Python3.7.4入门-2流程控制工具
2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...
- gitbook 入门教程之还在搞公众号互推涨粉?gitbook 集成导流工具,轻轻松松躺增粉丝!
相信大多数博客作者都或多或少有过这样想法: 现在各种平台这么多,想要实现全平台发布就要到处复制粘贴,等我有空一定做统一平台一次性全部解决! 不知道正在阅读文章的你,有没有这样的想法? 反正我确实这么想 ...