网络编程
2015-11-05 00:39
435 查看
一、概述
网络编程就是用Java语言实现计算机间数据的信息传递和资源共享
1.网络编程模型
1)OSI(Open System Interconnection开放系统互连)参考模型
1)TCP/IP参考模型
2.网络编程的三要素
1)IP地址:网络中设备的标识,不易记忆,可用主机名
A:点分十进制:IP:192.168.1.100
B:IP地址的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号:256*256*256 = 16777216
B类:前二号段为网络号段+后二段的主机号段
一个网络号:256*256 = 65536
C类:前三号段为网络号段+后一段的主机号段
一个网络号:256
C:IP地址的分类
A类 1.0.0.1---127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
特殊的IP地址:
127.0.0.1 回环地址(表示本机)
x.x.x.255 广播地址
x.x.x.0 网络地址
2)端口:用于标识进程的逻辑地址,不同进程的标识
范围:0-65535。其中0-1024为系统使用或保留端口不建议使用。
3)协议
UDP:数据打包,有限制,不连接,效率高,不可靠
TCP:建立数据通道,无限制,效率低,可靠
二、详解
1.InetAddress
此类表示互联网协议 (IP) 地址。
1)创建对象方法:
public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
2)常用方法:
public String getHostName():获取主机名
public String getHostAddress():获取IP地址
2.Socket机制
1)通信两端都应该有Socket对象
2)所有的通信都是通过Socket间的IO进行操作的
3.DatagramSocket和DatagramPacket
基于UDP协议,用来发送和接收数据报包的套接字
1)常用构造方法:
DatagramSocket:
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port,InetAddress laddr)
DatagramSocket:
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)
2)常用方法:
DatagramSocket:
public void send(DatagramPacket p):发送数据包
public void receive(DatagramPacket p):接收数据包
public InetAddress getInetAddress():返回此套接字连接的地址
DatagramPacket:
public InetAddress getInetAddress():返回数据报将要发往该机器或者是从该机器接收到的IP 地址。
public byte[] getData():返回数据缓冲区
public int getLength():返回将要发送或接收到的数据的长度
3)发送:
A:创建UDP发送端的Socket对象(DatagramSocket)
B:创建数据并把数据打包
C:发送数据
D:释放资源
案例:
4)接收:
A:创建UDP接收端的Socket对象(DatagramSocket)
B:创建数据包用于接收数据
C:接收数据
D:解析数据包
E:释放资源
案例:
4.Socket与ServerSocket
基于TCP协议,发送和接收数据
1)常用构造方法:
Socket:
public Socket(InetAddress address, int port)
public Socket(String host, int port)
ServerSocket:
public ServerSocket(int port)
2)常用方法:
Socket:
public OutputStream getOutputStream():获取输出流,用于写需要发送的数据
public InputStream getInputStream():获取输如流,用于读取需要发送的数据
public void shutdownOutput():Socket提供了一个终止,通知服务器数据发送完毕
ad5e
public voidshutdownInput():类似于shutdownOutput关闭的是输入流
ServerSocket:
public Socket accept():侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
3)发送:
A:创建TCP客户端的Socket对象
B:获取输出流,写数据
C:释放资源
案例
4)接收:
A:创建TCP服务器端的Socket对象
B:监听客户端连接
C:获取输入流,读取数据
D:释放资源
案例
网络编程就是用Java语言实现计算机间数据的信息传递和资源共享
1.网络编程模型
1)OSI(Open System Interconnection开放系统互连)参考模型
1)TCP/IP参考模型
2.网络编程的三要素
1)IP地址:网络中设备的标识,不易记忆,可用主机名
A:点分十进制:IP:192.168.1.100
B:IP地址的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号:256*256*256 = 16777216
B类:前二号段为网络号段+后二段的主机号段
一个网络号:256*256 = 65536
C类:前三号段为网络号段+后一段的主机号段
一个网络号:256
C:IP地址的分类
A类 1.0.0.1---127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
特殊的IP地址:
127.0.0.1 回环地址(表示本机)
x.x.x.255 广播地址
x.x.x.0 网络地址
2)端口:用于标识进程的逻辑地址,不同进程的标识
范围:0-65535。其中0-1024为系统使用或保留端口不建议使用。
3)协议
UDP:数据打包,有限制,不连接,效率高,不可靠
TCP:建立数据通道,无限制,效率低,可靠
二、详解
1.InetAddress
此类表示互联网协议 (IP) 地址。
1)创建对象方法:
public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
2)常用方法:
public String getHostName():获取主机名
public String getHostAddress():获取IP地址
2.Socket机制
1)通信两端都应该有Socket对象
2)所有的通信都是通过Socket间的IO进行操作的
3.DatagramSocket和DatagramPacket
基于UDP协议,用来发送和接收数据报包的套接字
1)常用构造方法:
DatagramSocket:
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port,InetAddress laddr)
DatagramSocket:
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)
2)常用方法:
DatagramSocket:
public void send(DatagramPacket p):发送数据包
public void receive(DatagramPacket p):接收数据包
public InetAddress getInetAddress():返回此套接字连接的地址
DatagramPacket:
public InetAddress getInetAddress():返回数据报将要发往该机器或者是从该机器接收到的IP 地址。
public byte[] getData():返回数据缓冲区
public int getLength():返回将要发送或接收到的数据的长度
3)发送:
A:创建UDP发送端的Socket对象(DatagramSocket)
B:创建数据并把数据打包
C:发送数据
D:释放资源
案例:
package cn.itcast_02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class SendDemo { public static void main(String[] args) throws IOException { // 创建发送端Socket对象 // DatagramSocket() DatagramSocket ds = new DatagramSocket(); // 创建数据,并把数据打包 // DatagramPacket(byte[] buf, int length, InetAddress address, int port) // 创建数据 byte[] bys = "hello,udp,我来了".getBytes(); // 长度 int length = bys.length; // IP地址对象 InetAddress address = InetAddress.getByName("192.168.12.92"); // 端口 int port = 10086; DatagramPacket dp = new DatagramPacket(bys, length, address, port); // 调用Socket对象的发送方法发送数据包 // public void send(DatagramPacket p) ds.send(dp); // 释放资源 ds.close(); } }
4)接收:
A:创建UDP接收端的Socket对象(DatagramSocket)
B:创建数据包用于接收数据
C:接收数据
D:解析数据包
E:释放资源
案例:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ReceiveDemo { public static void main(String[] args) throws IOException { // 创建接收端的Socket对象 DatagramSocket ds = new DatagramSocket(12345); while (true) { // 创建一个包裹 byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys, bys.length); // 接收数据 ds.receive(dp); // 解析数据 String ip = dp.getAddress().getHostAddress(); String s = new String(dp.getData(), 0, dp.getLength()); System.out.println("from " + ip + " data is : " + s); } // 释放资源 // 接收端应该一直开着等待接收数据,是不需要关闭 // ds.close(); } }
4.Socket与ServerSocket
基于TCP协议,发送和接收数据
1)常用构造方法:
Socket:
public Socket(InetAddress address, int port)
public Socket(String host, int port)
ServerSocket:
public ServerSocket(int port)
2)常用方法:
Socket:
public OutputStream getOutputStream():获取输出流,用于写需要发送的数据
public InputStream getInputStream():获取输如流,用于读取需要发送的数据
public void shutdownOutput():Socket提供了一个终止,通知服务器数据发送完毕
ad5e
public voidshutdownInput():类似于shutdownOutput关闭的是输入流
ServerSocket:
public Socket accept():侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
3)发送:
A:创建TCP客户端的Socket对象
B:获取输出流,写数据
C:释放资源
案例
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; /* * 客户端文本文件,服务器输出到控制台 */ public class ClientDemo { public static void main(String[] args) throws IOException { // 创建Socket对象 Socket s = new Socket("192.168.12.92", 34567); // 封装文本文件 BufferedReader br = new BufferedReader(new FileReader( "InetAddressDemo.java")); // 封装通道内的流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( s.getOutputStream())); String line = null; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); bw.flush(); } br.close(); s.close(); } }
4)接收:
A:创建TCP服务器端的Socket对象
B:监听客户端连接
C:获取输入流,读取数据
D:释放资源
案例
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException { // 创建服务器Socket对象 ServerSocket ss = new ServerSocket(34567); // 监听客户端连接 Socket s = ss.accept(); // 封装通道内的流 BufferedReader br = new BufferedReader(new InputStreamReader( s.getInputStream())); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } s.close(); } }
相关文章推荐
- ios网络请求 get——post 区别
- 单文件上传工具类封装解析
- java TCP 代码
- 呼叫中心系统,网络电话
- 解决httpurlconnection获取网页数据部分中文乱码问题
- HttpHelper类登录淘宝联盟并下载淘宝客订单xls c#模拟淘宝登录
- yum命令 来自: http://man.linuxde.net/yum
- HTTP协议以及Servlet
- HTTP协议入门
- python gzip http post请求结果解压
- http的302 redirect的一个问题
- bzoj1491【NOI2007】社交网络
- Spring的Hessian,Burlap,HttpInvoker远程调用
- 程序包javax.servlet与javax.servlet.http不存在
- AsyncHttpClient 、HttpURLConnection get/post请求、httpClient
- Wireshark基本介绍和学习TCP三次握手
- 以太网 IP TCP UDP数据包分析
- 网络图片浏览器、handle机制、网页代码查看器
- 多核处理器互联网络拓扑结构
- 开源中国源码学习数据篇(一)之android-async-http框架和AsyncTask