Java 基础高级2 网络编程
1.协议的概念:通信双方事先约定好的通信规则
2七层网络通信协议;应用成,表示层,会话层,传输层,网络层,数据链路层
3.TCP/IP协议:点对点通信,三层握手,安全有保证
4。UDP协议;广播协议,不保证数据安全但很高效
5.重要APl:InetAddress类,URl类,ServerSocked类,DatagramSocket类
6.网络编程主要有两部分:一是获取管理socket连接,二是获取使用输入输出流传输数据
1.网络模型介绍
OSI参考模型 TCP/IP参考模型
应用层 应用层
表示层
会话层
传输层 传输层
网络层 Internet层
数据链路层
物理层 网络接口层
TCP/IP协议组
HTTP FTP SMIP DNS RPC SNM
TCP UDP
RARP IP IGMP ICMP
以太网 令牌环 帧中 ATM

网络通讯要素:IP地址,端口号,传输协议
2.网络通讯要素1-IP地址
ip计算机唯一标识
端口号每台计算机应用程序的隔离
传输协议:通讯的规则
IP地址;网络中设备的标识
ip不方便记忆,使用主机名
本地回环地址;127.0.0.1 主机名localhost
2的10次方,小于255
IP也是一个类java.net下的InetAddress
里面没有构造函数,不能通过new来创建对象
3.网络通讯要素2-端口
端口号;用于标识进程的逻辑地址
有效端口0~65535,其中0~1024被系统使用或保留端口
某一个数据传给某一个进程,
能上网不能聊QQ,通过防火墙软件,把QQ相应数据传输端口被禁用了,就不能 发送和接收信息了
端口号是进程的唯一标识,如果QQ和飞秋是同一个端口,可以同时接收到一个信息
4.网络通讯要素3-传输协议
通讯的规则
常见协议TCP.UDP
传输层:TCP 和UDP
UDP
不需要建立连接,将数据及源和目的封装到数据包中,不需要源和目的进行连接
每个数据包的大小限制在64kb
因无连接,是不可靠协议:咱们发送的数据不知道对方是否接受到
不需要建立连接,效率相对快
TCP
建立连接,形成传输数据的通道
在连接中进行大数据量的传输,没有限制,基于通道,任意发送
通过三次握手完成确认连接,是可靠协议。连接已经建立,通话可靠,确认通道连接正常
必须建立连接,效率会降低
5. Socket(套接字)
Socket就是为网络服务提供的一种机制
通信的两端都有Socket
网络通讯其实就是Socket通信
数据在两个Socket件传输,数据传输IO流
网络编程步骤(Socket编程)
客户端
建立网络连接(指定iP地址和端口号),建立Socket服务,基于Socket服务器进行数据传输
交换数据(请求响应模型)
关闭连接,释放资源
服务器端
监听端口,当客户端发送数据时,有端口进行接收
获得连接(被动),等待客户端连接
交换数据,基于客户端请求,创建Socket服务
关闭连接
6. UDP发送端开发
发送端
1.建立UDP的Socket服务
DatagramSocket socket=new DatagramSocket();
2.封装数据包
byte[] data="开始UDP之旅".getByte();
DatagramPacket packet=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);
3.通过socket的send()发送数据
socket.send(packet);
4.关闭资源
socket.close();
7. UDP接收端开发
接收端
1.建立udp的socket服务器,必须指定端口
DatagramSocket socket=new DatagramSocket(10000);
2. 定义数据包用于接收数据
byte[] data=new byte[1024];
DatagramPacket packet=socket.receive(buf,buf.length)
3.通过socket的receive()方法,把数据接收到packet包中
socket.receive(packet);
4.通过packet的相应方法获取数据
packet.getData(); getAddress();...
String content=new String(packet.getData(),0.packet.length)
5.关闭资源
socket.close();
8. UDP聊天程序开发
UDP发送端
// 1. 创建udp的Socket服务,可指定端口,可不指定,开通一个任意的执行端口
DatagramSocket socket = new DatagramSocket();// 不需要指定端口,因为只需要一个端口把数据发送出去就行
// 2.提供相应的发送信息,封装数据包,自己构造包,某个ip和端口上(字节数组,ip,端口)
// 2.1动态发送数据,可以通过一个服务多次发送,多次接收
Scanner scanner = new Scanner(System.in);// 键盘录入是system.in
while (scanner.hasNext()) {// 判断是否录入结束
byte[] data = scanner.nextLine().getBytes();// 字节数组
DatagramPacket packet = new DatagramPacket(data, data.length,
InetAddress.getLocalHost(), 888);
// 3.调用Socket服务的发送方法send,进行信息的发送
socket.send(packet);
}
UDP接收端
// 1.创建socket服务,必须指定端口和发送端相同的端口,发送主机相同的端口
DatagramSocket socket = new DatagramSocket(888);
// 2.构建datagramPacket ,用于接收数据
byte[] data = new byte[1024];// 缓冲区
DatagramPacket packet = new DatagramPacket(data, data.length);// 只需要有数据就行
// 3.通过socket的receive方法,将数据封装到packet中
while (true) {
socket.receive(packet);// 该方法是阻塞方法// 把包以参数,10000端口监听到的信息,封装给包
// 4.通过packet提供的相应方法,获取客户端发送的相应信息
// InetAddress ip = packet.getAddress();
// System.out.println(ip.getHostAddress());
String content = new String(packet.getData(), 0, packet.getLength());// 返回字节数组
System.out.println(content);
}
首先运行接收端,然后运行接收端
9. TCP客户端开发
客户端
1. 建立TCP客户端socketfuw
Socket socket=new Socket(192.168.1.161,10001);
2.通过socket的getOutputStream()获得流对象
OutputStream out=socket.getOutputStream();
3.通过流对象的操作方法传输数据
byte[] data="开始春游".getByte();
out.write(data);
4.关闭资源
socket.close();
提前建立连接,在客户端和服务器端创建socket服务
tcp和udp编程的不同
1. 使用的封装API不一样
2.IP和端口号,udp是写到包里的,不用写在socket服务中
tcp是写到socket服务中,和服务器端建立连接
3. udp使用的是包,tcp使用的是流
输出是write,输入read
10 TCP服务器端开发
服务端
1. 建立TCP服务端socket服务
ServerSocket ss=new ServerSocket(10001);
2.通过ss的accept()获得客户端对象
Socket socket=ss.accept();
3.通过socket获取读取流,读取客户端发送的数据
InputStream in=socket.getInputStream();
4.通过流对象操作数据
byte[] buf=new byte[1024];
int len=in.read(buf);
5.关闭资源
socket.close();
ss.close();
11。TCP服务端和客户端的相互通讯
服务端回写信息
// 还可以回写信息,客户端和服务器端相互通信
OutputStream out = socket.getOutputStream();
// byte[] data = "可以".getBytes();
out.write("收到收到".getBytes());
客户端接收信息
// 接收服务器端数据
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
12.智能聊天机器人客户端开发
Java 基础高级2 网络编程的更多相关文章
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- java基础学习总结——网络编程
一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程.
- JAVA基础知识之网络编程——-网络通信模型(IO模型)
<Unix网络编程:卷1>中介绍了5中I/O模型,JAVA作为运行在宿主机上的程序,底层也遵循这5中I/O模型规则.这5中I/O模型分别是: 阻塞式IO 非阻塞式IO I/O复用 信号驱动 ...
- java 基础之--nio 网络编程
在传统的Java 网络编程中,对于客户端的每次连接,对于服务器来说,都要创建一个新的线程与客户端进行通讯,这种频繁的线程的创建,对于服务器来说,是一种巨大的损耗,在Java 1.4 引入Java ni ...
- 【java基础学习】网络编程
网络编程 InetAddress tcp udp
- 【Java基础总结】网络编程
网络编程 InetAddress tcp udp
- JAVA基础知识之网络编程——-使用Proxy创建连接
在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络, 如果改用URLConnection conn = url.ope ...
- JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播
IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...
随机推荐
- A*算法
A*在游戏设计中有它很典型的用法,是人工智能在游戏中的代表. A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚 A*算法,我看还是先说说何谓启发式算法. 一.何谓启发式搜索算法: 在说它之前 ...
- [转]SQL 常用函数及示例
原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...
- ubuntu中phpmyadmin密码忘记
在安装mysql时,默认只让你设置了root的密码,如果root的密码忘记,处理办法如下 第一步: 这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的 ...
- Android基础总结(三)
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- window.hostory(浏览器的历史记录)
浏览器会对同一个窗口(选项卡)中访问的网页进行记录,不管我们是通过以下哪种方式改变网页,浏览器都会把改变后的网页记录下来,以便通过浏览器的前进和后退按钮,能够快速的切换到已经访问过的网页: 1)直接 ...
- BZOJ1257 [CQOI2007]余数之和sum
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- JS中使用MD5加密
下载 MD5 使用MD5加密的方法:下载md5.js文件,在网页中引用该文件: < script type="text/javascript" src="md5.j ...
- Redis Cluster 分区实现原理
Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀:如何保证客户端 ...
- windows常用快捷键
windows常用快捷键 Fn+F1:Windows的支持和帮助 =Windows 徽标+F1 Fn+F2:重命名对象 Fn+F3:查找所有文件 Fn+F4:选择“转到不同的文件夹”框并沿框中的项向下 ...
- Celery的实践指南
http://www.cnblogs.com/ToDoToTry/p/5453149.html Celery的实践指南 Celery的实践指南 celery原理: celery实际上是实现了一个典 ...