您的位置:首页 > 理论基础 > 计算机网络

黑马程序员——网络编程

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培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: