黑马程序员_java网络编程总结
来源:互联网 发布:慢跑鞋 知乎 编辑:程序博客网 时间:2024/06/03 21:48
--------------android培训、java培训、期待与您交流! --------------
一、网络编程
(1)网络模型分为两大类:OSI参考模型、TCP/IP参考模型
(2)OSI参考模型分为七层:从上到下分别为,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层;
(3)TCP/IP参考模型分为四层::应用层,传输层,网际层,主机至网络层
其实在网路编程涉及的在传输层和网际层,做web开发在应用层。
网络通讯三要素:IP地址,端口号,传输协议
(1)IP地址:网络中设备的标识,不容易记忆,通常情况用主机名,我们编程经常用于在本机测试网站的IP地址是本地回环地址:127.0.0.1,主机名字就是我们常用的localhost。
(2)端口号:用于标识进程的逻辑地址,不同进程的标识。其中有效端口:0-65535,而0-1024端口是系统使用或保留端口。
(3)传输协议:即是通讯的规则,常见的协议TCP、UDP。
IP相关类:InetAddress类应用:
import java.net.*;public class IP { public static void main(String[] args) {InetAddress ip; // 创建InetAddress对象try { ip = InetAddress.getLocalHost(); // 实例化对象String localname = ip.getHostName(); // 获取本机名String localip = ip.getHostAddress(); // 获取本IP地址System.out.println("本机名:" + localname);System.out.println("本机IP地址:" + localip); } catch (UnknownHostException e) {e.printStackTrace(); // 输出异常信息}}}二、传输协议
UDP传输协议:用户数据报协议(User Datagram Protocol)面向无连接,传输速度快,不可靠的协议,每个数据报小于64K。比如,我们用聊天软件的时候使用的就是UDP协议。
TCP传输协议:传输控制协议(Transmission Contrcol Protocol)面向连接,传输速度相对较慢,可靠的协议,可以进行大数据量的传输。
Socket机制:为网络服务的一种机制。
特点:
(1)通信 的两端都有Socket
(2)网络通信其实就是Socket间的通信
(3)数据在两个Socket间通过IO传输
1、UDP
udp发送端:
(1)建立udp socket服务。
(2)提供数据,并将数据封装到数据包中。
(3)通过socket服务的发送功能,将数据包发出去。
(4)关闭资源。
UDP接收端:
(1)定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
(2)定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
(3)通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
(4)通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
(5)关闭资源。
实例:
发送端发送文字,接收端接收并显示
import java.net.*; import java.io.*; //UDP发送端class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) //构造函数,建立udp socket服务。 { this.ds = ds; } public void run() { try{ BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//输入数据放入输入缓冲区 String line = null; while ((line = bufr.readLine())!=null) { // 读取流中的行字符串赋给line if (line.equals("over")) { //如果输入over则结束 break; } byte[] buf = line.getBytes(); //将数据存在byte数组里 //确定数据,并封装成数据包。 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),8000); ds.send(dp); //调用send方法将数据包送出 } ds.close(); }catch(Exception e){ System.out.println("发送失败"); } } } class Rece implements Runnable { private DatagramSocket ds; public Rece (DatagramSocket ds){ //构造函数,建立udp socket服务。 this.ds = ds; } public void run () { try{ byte [] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //构造 DatagramPacket,用来接收长度为 length 的数据包。 ds.receive(dp); //udp调用receive接收并存到数据包 String ip = dp.getAddress().getHostAddress(); // String data = new String (dp.getData(),0,dp.getLength()); //将dp数据包中的数据存入字符串data System.out.println(ip+":"+data); }catch(Exception e){ System.out.println("接受失败"); } } } class ChatDemo{ public static void main(String[] args) throws Exception{ DatagramSocket sendSocket = new DatagramSocket(); DatagramSocket receSocket = new DatagramSocket(8000);//接收8000端口上的数据 //建立发送端的线程并启动 new Thread(new Send(sendSocket)).start(); //建立接收端的线程并启动 new Thread(new Rece(receSocket)).start(); } }2、TCP
TCP传输:
(1)tcp分客户端和服务端。
(2)客户端对应的对象是Socket。
服务端对应的对象是ServerSocket。
客户端:
通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。
因为tcp是面向连接的。所以在建立socket服务时,
就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。
需求:给服务端发送给一个文本数据。
代码:
import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;class TcpClient { public static void main(String[] args) throws Exception { //1、创建客户端的Socket服务。指定目的主机和端口 Socket s=new Socket("127.0.0.1",10000); //2、获取Socket流中输出流,发送数据 OutputStream out=s.getOutputStream(); out.write("服务端你好!".getBytes()); //3、获取Socket流中的输入流,用来接收服务端的反馈信息并打印 InputStream in=s.getInputStream(); byte[] buf=new byte[1024]; int len=in.read(buf);//读取反馈的数据 //输出接收的数据 System.out.println(new String(buf,0,len)); s.close();//关闭资源 } }
服务端:
(1)建立服务端的socket服务。ServerSocket();
并监听一个端口。
(2)获取连接过来的客户端对象。
通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
(3)客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
并打印在控制台。
(4)关闭服务端。(可选)
import java.net.*; import java.io.*; class TcpServer { public static void main(String[] args)throws Exception { //1、创建服务端的Socket服务,并监听一个端口 ServerSocket ss=new ServerSocket(10000); //2、通过accept方法获取连接过来的客户端对象。 Socket s=ss.accept(); //获取客户端ip String ip=s.getInetAddress().getHostName(); System.out.println(ip+"connected...."); //3、获取对应客户端对象的读取流读取发过来的数据,并打印 InputStream in=s.getInputStream(); byte[] buf=new byte[1024]; int len=in.read(buf); System.out.println(new String(buf,0,len)); //4、调用对应的客户端的输出流写入返回数据 OutputStream out=s.getOutputStream(); out.write("我是服务端!消息已收到!".getBytes()); //关闭资源 s.close(); ss.close();//可选操作 } }
3、URL封装和URLConection封装:
String getFile():获取此URL的文件名
String getHost():获取此URL的主机名(如果适用)
String getPath():获取此URL的路径部分
int getPort(): 获取此URL的端口号
String getProtocol():获取此URL的协议名称
String getQuery():获取此URL的查询部
import java.io.InputStream;import java.net.URL;import java.net.URLConnection;class URLConnectionDemo { public static void main(String[] args)throws Exception{ URL url=new URL("http://www.qq.com"); URLConnection conn=url.openConnection(); InputStream in=conn.getInputStream(); byte[] buf=new byte[1024]; int len=in.read(buf); System.out.println(new String(buf,0,len)); } }
- 黑马程序员_java网络编程总结
- 黑马程序员_java网络编程总结
- 黑马程序员_Java基础:网络编程总结
- 黑马程序员_Java 网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- 黑马程序员_java网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java IO总结
- CF221 Div2 (C)
- 黑马程序员_MyEclipse的使用技巧
- android之ListView简单实现
- 删除sql server默认约束的通用脚本
- 黑马程序员_java网络编程总结
- 使用httpclient utf8方式请求数据
- Android 系统对话框
- 黑马程序员_反射
- 如何一次性删除List里的所有元素?
- 扩展easyUI tab控件添加加载遮罩效果
- 理工大学ACM平台题答案关于C语言 1474 库存清单应用程序
- ndk c调用java函数
- java多进程与多线程