黑马程序员——网络编程


------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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值