黑马程序员——Java基础---网络编程
2015-06-15 22:37
627 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.网络通信概述
1>网络模型:OSI参考模型和TCP/IP参考模型
2>网络通信要素:IP地址;端口号;传输协议
3>网络通信:
a>找到对方IP
b>数据发送到对方指定的应用程序上需要端口(0-65535其中0-1024系统使用保留)。
c>定义通信规则,即协议。如:TCP/IP
4>IP地址
网络中设备标示。本地回环地址:127.0.0.1主机名:localhost
5>UDP和TCP
a>UDP
1)将数据及源和目的封装到数据包中,不需要建立连接
2)每个数据包的大小限制在64k
3)不可靠协议
4)不需要建立连接,速度快
5)
b>TCP
1)建立连接,形成传输数据的通道。
2)在连接中进行大数据量传输
3)通过三次握手完成连接,是可靠协议
4)必须建立连接,效率会稍低
6>Socket
a>Socket是为网络服务提供的一种机制
b>通信的两端都有Socket
d>网络通信其实就是Socket间的通信
e>数据在两个Socket间通过IO传输
2.UDP通信
1>UDP发送端
DatagramSocket:发送和接收数据报包的套接字。
DatagramPacket:表示数据报包。
UDP将一段文字发送出去的步骤:
a>建立updSocket服务。通过DatagramSocket对象
b>提供数据,并将数据封装到数据包中。通过DatagramPacket对象
c>通过Socket服务的发送功能,将数据包发送出去。send()
d>关闭资源
class UDPSend
{
public static void main(String []args)throws Exception
{
//建立UDP服务
DatagramSocketds = new DatagramSocket();
//提供发送的数据
byte[] buf = "UDP Send Data".getBytes();
//将发送的数据封装到数据包
DatagramPacketdp = new DatagramPacket(buf,buf.length,
InetAddress.getByName("127.0.0.1"),10000);
ds.send(dp);//发送数据
ds.close();//关资源
}
}
2>UDP接收端
接收UDP协议传输的数据并处理:
a>定义udpsocket服务。通常会监听一个端口,给接收程序定义数字标识
b>定义一个数据包,因为要存储接收到的字节数据。数据包对象中有更多的功能可以提取字节数据中的不同数据信息
c>通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中
d>通过数据包对象的特有功能,将这些不同的数据取出。
e>关闭资源
class UDPRec
{
public static void main(String []args)throws Exception
{
//建立UDP服务
DatagramSocketds = new DatagramSocket(10000);
//定义一个接受数据的缓冲区
byte[] buf = new byte[1024];
//定义一个接收数据的数据包
DatagramPacketdp = new DatagramPacket(buf,buf.length);
ds.receive(dp);//接收数据到包中,阻塞式方法
Stringip = dp.getAddress().getHostAddress();//通过数据包对象获取ip值
//通过数据包对象获取数据
Stringdata = new String(dp.getData(),0,dp.getLength());
intport = dp.getPort();//通过数据包对象获取端口
System.out.println(ip+data+port);//输出
}
}
3.TCP通信
1>TCP分为客户端和服务端;
客户端对应的对象是Socket,服务端对应的对象是ServerSocket。
2>客户端
Socket该对象在建立时,就可以去连接指定主机。因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。
步骤:a>创建Socket服务,并指定要连接的主机和端口。
b>如果连接建立成功,说明数据传输通道已建立好。该通道为Socket流,该流有输入,又有输出。要想获取输入或输出流对象可以Socket通过getOutputStream()和getInputStream()来获取。
c>使用输出流将数据写入
d>关闭资源
public classClientDemo2 {
public static void main(String[] args)throws UnknownHostException, IOException {
//客户端发数据到服务端
Socketsocket = new Socket("192.168.1.100",10002);
OutputStreamout = socket.getOutputStream();
out.write("tcp演示:哥们又来了!".getBytes());
//读取服务端返回的数据,使用socket读取流。
InputStreamin = socket.getInputStream();
byte[]buf = new byte[1024];
intlen = in.read(buf);
String text = new String(buf,0,len);
System.out.println(text);
//关闭资源。
socket.close();
}
}
3>服务端
步骤:a>建立服务端的Socket服务。ServerSocket(),并监听一个端口。
b>获取连接过来的客户端对象,通过ServerSocket的accept()方法。没有连接就会等待,此方法是阻塞式的。
c>客户端如果发来数据,那么服务端要使用对应的客户对象,并获取到该客户端对象的读取流来读取过来的数据
d>关闭客户端,关闭服务(可选)。
public classServerDemo2 {
public static void main(String[] args)throws IOException {
//
服务端接收客户端发送过来的数据,并打印在控制台上。
//1创建服务端对象。
ServerSocketss = new ServerSocket(10002);
//2,获取连接过来的客户端对象。
Sockets = ss.accept();
Stringip = s.getInetAddress().getHostAddress();
//3,通过socket对象获取输入流,要读取客户端发来的数据
InputStreamin = s.getInputStream();
byte[]buf = new byte[1024];
intlen = in.read(buf);
Stringtext = new String(buf,0,len);
System.out.println(ip+":"+text);
//使用客户端socket对象的输出流给客户端返回数据
OutputStreamout = s.getOutputStream();
out.write("收到".getBytes());
s.close();
ss.close();
}
}
4.URL和URLConnection类
1>类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
2>URLConnection
抽象类 URLConnection,
它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL
引用的资源。
创建一个到 URL
的连接需要几个步骤:
a>通过在 URL
上调用 openConnection 方法创建连接URL所引用的远程对象。
b>处理设置参数和一般请求属性。
c>使用 connect
方法建立到远程对象的实际连接。
d>远程对象变为可用。远程对象的头字段和内容变为可访问。
classURLConnectionDemo
{
public static void main(String[]args)throws Exception
{
URLurl = new URL("http://www.baidu.com/");
URLConnectionconn = url.openConnection();
System.out.println(conn);
InputStreamin = conn.getInputStream();
byte[]buf = new byte[1024*1024*10];
intlen = in.read(buf);
System.out.println(newString(buf,0,len));
}
}
5.域名解析
1>概述:将主机名翻译成IP地址。
2>解析步骤
本地输入主机名------>DSN服务器------>通过DSN获得IP地址------>通过IP地址获取对应主机
1.网络通信概述
1>网络模型:OSI参考模型和TCP/IP参考模型
2>网络通信要素:IP地址;端口号;传输协议
3>网络通信:
a>找到对方IP
b>数据发送到对方指定的应用程序上需要端口(0-65535其中0-1024系统使用保留)。
c>定义通信规则,即协议。如:TCP/IP
4>IP地址
网络中设备标示。本地回环地址:127.0.0.1主机名:localhost
5>UDP和TCP
a>UDP
1)将数据及源和目的封装到数据包中,不需要建立连接
2)每个数据包的大小限制在64k
3)不可靠协议
4)不需要建立连接,速度快
5)
b>TCP
1)建立连接,形成传输数据的通道。
2)在连接中进行大数据量传输
3)通过三次握手完成连接,是可靠协议
4)必须建立连接,效率会稍低
6>Socket
a>Socket是为网络服务提供的一种机制
b>通信的两端都有Socket
d>网络通信其实就是Socket间的通信
e>数据在两个Socket间通过IO传输
2.UDP通信
1>UDP发送端
DatagramSocket:发送和接收数据报包的套接字。
DatagramPacket:表示数据报包。
UDP将一段文字发送出去的步骤:
a>建立updSocket服务。通过DatagramSocket对象
b>提供数据,并将数据封装到数据包中。通过DatagramPacket对象
c>通过Socket服务的发送功能,将数据包发送出去。send()
d>关闭资源
class UDPSend
{
public static void main(String []args)throws Exception
{
//建立UDP服务
DatagramSocketds = new DatagramSocket();
//提供发送的数据
byte[] buf = "UDP Send Data".getBytes();
//将发送的数据封装到数据包
DatagramPacketdp = new DatagramPacket(buf,buf.length,
InetAddress.getByName("127.0.0.1"),10000);
ds.send(dp);//发送数据
ds.close();//关资源
}
}
2>UDP接收端
接收UDP协议传输的数据并处理:
a>定义udpsocket服务。通常会监听一个端口,给接收程序定义数字标识
b>定义一个数据包,因为要存储接收到的字节数据。数据包对象中有更多的功能可以提取字节数据中的不同数据信息
c>通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中
d>通过数据包对象的特有功能,将这些不同的数据取出。
e>关闭资源
class UDPRec
{
public static void main(String []args)throws Exception
{
//建立UDP服务
DatagramSocketds = new DatagramSocket(10000);
//定义一个接受数据的缓冲区
byte[] buf = new byte[1024];
//定义一个接收数据的数据包
DatagramPacketdp = new DatagramPacket(buf,buf.length);
ds.receive(dp);//接收数据到包中,阻塞式方法
Stringip = dp.getAddress().getHostAddress();//通过数据包对象获取ip值
//通过数据包对象获取数据
Stringdata = new String(dp.getData(),0,dp.getLength());
intport = dp.getPort();//通过数据包对象获取端口
System.out.println(ip+data+port);//输出
}
}
3.TCP通信
1>TCP分为客户端和服务端;
客户端对应的对象是Socket,服务端对应的对象是ServerSocket。
2>客户端
Socket该对象在建立时,就可以去连接指定主机。因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。
步骤:a>创建Socket服务,并指定要连接的主机和端口。
b>如果连接建立成功,说明数据传输通道已建立好。该通道为Socket流,该流有输入,又有输出。要想获取输入或输出流对象可以Socket通过getOutputStream()和getInputStream()来获取。
c>使用输出流将数据写入
d>关闭资源
public classClientDemo2 {
public static void main(String[] args)throws UnknownHostException, IOException {
//客户端发数据到服务端
Socketsocket = new Socket("192.168.1.100",10002);
OutputStreamout = socket.getOutputStream();
out.write("tcp演示:哥们又来了!".getBytes());
//读取服务端返回的数据,使用socket读取流。
InputStreamin = socket.getInputStream();
byte[]buf = new byte[1024];
intlen = in.read(buf);
String text = new String(buf,0,len);
System.out.println(text);
//关闭资源。
socket.close();
}
}
3>服务端
步骤:a>建立服务端的Socket服务。ServerSocket(),并监听一个端口。
b>获取连接过来的客户端对象,通过ServerSocket的accept()方法。没有连接就会等待,此方法是阻塞式的。
c>客户端如果发来数据,那么服务端要使用对应的客户对象,并获取到该客户端对象的读取流来读取过来的数据
d>关闭客户端,关闭服务(可选)。
public classServerDemo2 {
public static void main(String[] args)throws IOException {
//
服务端接收客户端发送过来的数据,并打印在控制台上。
//1创建服务端对象。
ServerSocketss = new ServerSocket(10002);
//2,获取连接过来的客户端对象。
Sockets = ss.accept();
Stringip = s.getInetAddress().getHostAddress();
//3,通过socket对象获取输入流,要读取客户端发来的数据
InputStreamin = s.getInputStream();
byte[]buf = new byte[1024];
intlen = in.read(buf);
Stringtext = new String(buf,0,len);
System.out.println(ip+":"+text);
//使用客户端socket对象的输出流给客户端返回数据
OutputStreamout = s.getOutputStream();
out.write("收到".getBytes());
s.close();
ss.close();
}
}
4.URL和URLConnection类
1>类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
2>URLConnection
抽象类 URLConnection,
它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL
引用的资源。
创建一个到 URL
的连接需要几个步骤:
a>通过在 URL
上调用 openConnection 方法创建连接URL所引用的远程对象。
b>处理设置参数和一般请求属性。
c>使用 connect
方法建立到远程对象的实际连接。
d>远程对象变为可用。远程对象的头字段和内容变为可访问。
classURLConnectionDemo
{
public static void main(String[]args)throws Exception
{
URLurl = new URL("http://www.baidu.com/");
URLConnectionconn = url.openConnection();
System.out.println(conn);
InputStreamin = conn.getInputStream();
byte[]buf = new byte[1024*1024*10];
intlen = in.read(buf);
System.out.println(newString(buf,0,len));
}
}
5.域名解析
1>概述:将主机名翻译成IP地址。
2>解析步骤
本地输入主机名------>DSN服务器------>通过DSN获得IP地址------>通过IP地址获取对应主机
相关文章推荐
- Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
- TCP/IP详解学习笔记(1)-基本概念
- TCP和UDP的区别
- [互联网开源知识]001.网络广告定价模式
- TCP深入解析(二)
- 简述linux网络配置
- TCP三次握手机制
- Linux实时网络监控工具:iftop
- volley源码解析(五)--NetworkDispatcher从网络中获取数据
- [转载]网络原理,以及对VM虚拟网络VMnet0、VMnet1、VMnet8的图解
- Node.js网络编程
- python网络编程学习笔记(9):数据库客户端
- 天气预报---网络加载最新天气信息,截取JSON文件
- 人们为何喜欢在社交网络发布个人状态?
- HttpClient初步使用方法
- epoll详解
- VB.net使用httpWebRequest访问带cookie的网站时如何传递cookie值
- HttpUtility.UrlEncode
- Linux网络编程——I/O复用之select详解
- c# tcplistener 与 client通信 服务端 今天写一下