黑马程序员——网络编程

来源:互联网 发布:mac版魔兽世界大脚插件 编辑:程序博客网 时间:2024/06/01 22:08


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

网络编程:

要理解网路编程,就要先知道什么是计算机网络。

计算机网络:是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

由此我们就知道,网络编程就是用来实现网络互联,使不同计算机上运行的程序,可以进行数据交换。

 

网络编程既然是不同计算机的程序进行数据交换,那么如何进行交换?

要想实现数据交换,就要遵守网络编程三要素:

    1IP地址:

    获取方法:InetAddress类是表示互联网协议(IP)地址。该类中getHostAddress()方法。

2、端口号:

    是应用程序的标识。范围:0-65535。其中0-1024不建议使用。

3、传输协议:

        UDP:数据打包,限制容量,不建立连接,效率高,不安全。可以用于传输视频或mp3等,一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。

        TUP:建立数据通道,不限制容量,效率低,安全。也称为三次握手协议。主要用于数据下载,文件传输,可靠性要求高的应用。

 

结合三要素,还要知道什么是Socket机制:

    Socket是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字,套接字就是两台及其间通信的端点。

     1、通信两端都应该有Socket对象。

     2、所有的通信都是通过Socket键的IO进行操作的。

   

Socket机制具体结构图如下:

 

 

一、UDP协议进行数据传输:

1DatagramSocket类是UDP用来发送和接受数据报包的套接字。

2DatagramPacket类表示数据报包。

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协议进行数据传输:

1Socket类是实现TUP协议客户端套接字,ServerSocket类是实现TUP协议服务端套接字。

3、客户端和服务端必须各自是独立的运行程序,一般先写服务端。

4、客户端和服务端是用IO流进行数据传输。此IOSocket类建立通道的流。

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();    }}


UDPTUP数据传输的总结:

1、套接字对象:

       UDP接受和发送都是同一个套接字对象

       TUP接受和发送都有各自的套接字对象

2、传输方法:

           UDP是先建立字节数组容器,再建立数据包接受和发送

           TUP是一端输入流,另一端输出流。反之即可

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击