黑马程序员——网络编程
2015-12-11 15:19
597 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程:
要理解网路编程,就要先知道什么是计算机网络。
计算机网络:是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
由此我们就知道,网络编程就是用来实现网络互联,使不同计算机上运行的程序,可以进行数据交换。
网络编程既然是不同计算机的程序进行数据交换,那么如何进行交换?
要想实现数据交换,就要遵守网络编程三要素:
1、IP地址:
获取方法:InetAddress类是表示互联网协议(IP)地址。该类中getHostAddress()方法。
2、端口号:
是应用程序的标识。范围:0-65535。其中0-1024不建议使用。
3、传输协议:
UDP:数据打包,限制容量,不建立连接,效率高,不安全。可以用于传输视频或mp3等,一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。
TUP:建立数据通道,不限制容量,效率低,安全。也称为三次握手协议。主要用于数据下载,文件传输,可靠性要求高的应用。
结合三要素,还要知道什么是Socket机制:
Socket是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字,套接字就是两台及其间通信的端点。
1、通信两端都应该有Socket对象。
2、所有的通信都是通过Socket键的IO进行操作的。
Socket机制具体结构图如下:
一、UDP协议进行数据传输:
1、DatagramSocket类是UDP用来发送和接受数据报包的套接字。
2、DatagramPacket类表示数据报包。
3、接收端和发送端必须各自是独立的运行程序,一般先写接收端。
4、接收端要调用receive(DatagramPacket p)接受方法,发送端要调用send(DatagramSocket p)发送方法。
5、都是要先开启接收端,再开启发送端才能接受到数据。
6、数据传输完毕后都要释放资源。
UDP接收端演示:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 接收端
*/
public class ReceiveDemo {
public static void main(String[] args)throws Exception{
//创建UDP套接字接收端对象,并绑定端口号
DatagramSocket ds = new DatagramSocket(55555);
//创建接受容器
byte[] bys = new byte[1024];
//创建数据报包对象,接受传输数据
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//调用接受方法
ds.receive(dp);
//创建字符串对象,将传输数据转换为字符串
String str = new String(dp.getData(),0,dp.getLength());
System.out.println("接受数据为:"+str);
//释放资源
ds.close();
}
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
UDP发送端演示:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 发送端
*/
public class SendDemo {
public static void main(String[] args)throws Exception{
//创建UDP套接字发送端对象
DatagramSocket ds = new DatagramSocket();
//写数据,将字符串转为字节数组
byte[] bys = "我是传输数据!".getBytes();
//创建数据报包对象,将长度为length的字节数组发送到指定IP和端口
DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("MDONG"),55555);
//调用发送方法
ds.send(dp);
//释放资源
ds.close();
}
}
二、TUP协议进行数据传输:
1、Socket类是实现TUP协议客户端套接字,ServerSocket类是实现TUP协议服务端套接字。
3、客户端和服务端必须各自是独立的运行程序,一般先写服务端。
4、客户端和服务端是用IO流进行数据传输。此IO是Socket类建立通道的流。
5、服务端有个方法,accept()监听是否有客户端进行连接,并返回该客户端(三次握手)。
6、必须先开启服务端,再开启客户端,反之程序会报错。
7、数据传输完毕后都要释放资源。
TUP服务端演示:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*/
public class ServerSocketDemo {
public static void main(String[] args)throws Exception{
//创建服务端套接字对象,并绑定端口号
ServerSocket ss = new ServerSocket(55555);
//监听是否有客户端连接
Socket s = ss.accept();
//获取Socket通道里的字节输入流,并包装成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//直接读取数据并输出
String str = br.readLine();
System.out.println("服务端接受数据:"+str);
//释放资源。正常情况下,服务端都是不会关闭的
s.close();
}
}
TUP客户端演示:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
* 客户端
*/
public class SocketDemo {
public static void main(String[] args)throws Exception{
//创建客户端套接字对象,并连接到指定的主机名(IP)和端口号
Socket s = new Socket("MDONG",55555);
//键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//获取Socket通道内的字节输入流,并转为字符输入流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//把键盘录入的数据写入通道内
bw.write(br.readLine());
bw.newLine();
bw.flush();
//释放资源
s.close();
}
}
UDP和TUP数据传输的总结:
1、套接字对象:
UDP接受和发送都是同一个套接字对象
TUP接受和发送都有各自的套接字对象
2、传输方法:
UDP是先建立字节数组容器,再建立数据包接受和发送
TUP是一端输入流,另一端输出流。反之即可
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程:
要理解网路编程,就要先知道什么是计算机网络。
计算机网络:是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
由此我们就知道,网络编程就是用来实现网络互联,使不同计算机上运行的程序,可以进行数据交换。
网络编程既然是不同计算机的程序进行数据交换,那么如何进行交换?
要想实现数据交换,就要遵守网络编程三要素:
1、IP地址:
获取方法:InetAddress类是表示互联网协议(IP)地址。该类中getHostAddress()方法。
2、端口号:
是应用程序的标识。范围:0-65535。其中0-1024不建议使用。
3、传输协议:
UDP:数据打包,限制容量,不建立连接,效率高,不安全。可以用于传输视频或mp3等,一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。
TUP:建立数据通道,不限制容量,效率低,安全。也称为三次握手协议。主要用于数据下载,文件传输,可靠性要求高的应用。
结合三要素,还要知道什么是Socket机制:
Socket是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字,套接字就是两台及其间通信的端点。
1、通信两端都应该有Socket对象。
2、所有的通信都是通过Socket键的IO进行操作的。
Socket机制具体结构图如下:
一、UDP协议进行数据传输:
1、DatagramSocket类是UDP用来发送和接受数据报包的套接字。
2、DatagramPacket类表示数据报包。
3、接收端和发送端必须各自是独立的运行程序,一般先写接收端。
4、接收端要调用receive(DatagramPacket p)接受方法,发送端要调用send(DatagramSocket p)发送方法。
5、都是要先开启接收端,再开启发送端才能接受到数据。
6、数据传输完毕后都要释放资源。
UDP接收端演示:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 接收端
*/
public class ReceiveDemo {
public static void main(String[] args)throws Exception{
//创建UDP套接字接收端对象,并绑定端口号
DatagramSocket ds = new DatagramSocket(55555);
//创建接受容器
byte[] bys = new byte[1024];
//创建数据报包对象,接受传输数据
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//调用接受方法
ds.receive(dp);
//创建字符串对象,将传输数据转换为字符串
String str = new String(dp.getData(),0,dp.getLength());
System.out.println("接受数据为:"+str);
//释放资源
ds.close();
}
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
UDP发送端演示:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 发送端
*/
public class SendDemo {
public static void main(String[] args)throws Exception{
//创建UDP套接字发送端对象
DatagramSocket ds = new DatagramSocket();
//写数据,将字符串转为字节数组
byte[] bys = "我是传输数据!".getBytes();
//创建数据报包对象,将长度为length的字节数组发送到指定IP和端口
DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("MDONG"),55555);
//调用发送方法
ds.send(dp);
//释放资源
ds.close();
}
}
二、TUP协议进行数据传输:
1、Socket类是实现TUP协议客户端套接字,ServerSocket类是实现TUP协议服务端套接字。
3、客户端和服务端必须各自是独立的运行程序,一般先写服务端。
4、客户端和服务端是用IO流进行数据传输。此IO是Socket类建立通道的流。
5、服务端有个方法,accept()监听是否有客户端进行连接,并返回该客户端(三次握手)。
6、必须先开启服务端,再开启客户端,反之程序会报错。
7、数据传输完毕后都要释放资源。
TUP服务端演示:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*/
public class ServerSocketDemo {
public static void main(String[] args)throws Exception{
//创建服务端套接字对象,并绑定端口号
ServerSocket ss = new ServerSocket(55555);
//监听是否有客户端连接
Socket s = ss.accept();
//获取Socket通道里的字节输入流,并包装成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//直接读取数据并输出
String str = br.readLine();
System.out.println("服务端接受数据:"+str);
//释放资源。正常情况下,服务端都是不会关闭的
s.close();
}
}
TUP客户端演示:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
* 客户端
*/
public class SocketDemo {
public static void main(String[] args)throws Exception{
//创建客户端套接字对象,并连接到指定的主机名(IP)和端口号
Socket s = new Socket("MDONG",55555);
//键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//获取Socket通道内的字节输入流,并转为字符输入流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//把键盘录入的数据写入通道内
bw.write(br.readLine());
bw.newLine();
bw.flush();
//释放资源
s.close();
}
}
UDP和TUP数据传输的总结:
1、套接字对象:
UDP接受和发送都是同一个套接字对象
TUP接受和发送都有各自的套接字对象
2、传输方法:
UDP是先建立字节数组容器,再建立数据包接受和发送
TUP是一端输入流,另一端输出流。反之即可
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
相关文章推荐
- 使用xutils请求网络参数为json字符串时报错IOException
- TCP 和 UDP 能否使用相同的端口号?
- http://www.iconfont.cn/
- 网络应用的编程模型
- Android Asynchronous Http Client
- PHP漏洞全解(七)-HTTP响应拆分
- iOS开源项目大全(一)(整理自网络)
- 简单的网络协议介绍
- iOS开源项目大全(二)(整理自网络)
- Android网络编程---HttpURLConnection
- 处理TCP连包的一小段代码
- spring(基础十) Spring HTTP Invoker使用介绍
- 用Xutils 加载网络图片。设置Appliction
- linux使用wget下载https开头url的文件
- TCP三次握手
- weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection
- java下载网页内容和网络图片
- Caffe fine-tuning 微调网络
- Android: 详解触摸事件如何传递 - 玲音 原文 http://www.cnblogs.com/superlcr/p/3946034.html
- 服务器tcp连接timewait过多优化及详细分析