java网络编程技术

 

1、什么是网络编程?

网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。

 

2.IP和端口

 

解决了文章最开始提到的定位的问题。

IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证);网络编程是和远程计算机的通信,所以必须先能定位到远程计算机;IP帮助解决此问题;一台计算机中可能有很多进程,具体和哪一个进程进行通信,这就得靠端口来识别;

IP和端口能唯一定位到需要通信的进程。这里的IP表示地址,区别于IP协议。在OSI体系还是TCP/IP体系中,IP协议位于网际层,来封装IP地址到报

2.1IP常用方法

 如:

InetAddress i = InetAddress.getLocalHost();
		System.out.println(i);
		
		System.out.println(i.getHostName());//获取主机名
		
		System.out.println(i.getHostAddress());//获取主机IP地址
		
		
		InetAddress ia = InetAddress.getByName("10.172.5.195");//获取主机地址为10.172.5.195的信息
		System.out.println(ia.getHostName());
		System.out.println(ia.getHostAddress());
 

 

 

3.TCP和UDP

 

TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

  一、UDP特点:
       1、将数据源和目的地封装到数据包中,不需要建立连接
       2、每个数据包的大小限制在64k以内
       3、因无连接,是不可靠协议

       4、不需要建立连接,速度快

例子:聊天、对讲机就是UDP的,面向无连接(不管在不在,知不知道,只管发送,求速度),丢数据也不管。速度快。数据被分成包

如:UDP发送端

 

<span style="font-size:18px;background-color: rgb(255, 255, 255);">public class ip2 {
	public static void main(String[] args) throws IOException{
		
		//创建udp服务,通过DatagramSocket对象
		DatagramSocket ds = new DatagramSocket();
		
		//确定数据,并封装成数据包
		byte[] b = "wo hen hao".getBytes();
		DatagramPacket dp = 
			   new DatagramPacket(b,b.length,InetAddress.getByName("10.172.8.174"),10001);
		
		//通过send方法发送出去
		ds.send(dp);
		
		//关闭资源
		ds.close();
	}

}</span>
<span style="font-size:18px;background-color: rgb(255, 255, 255);">UDP接收端</span>
<span style="font-size:18px;background-color: rgb(255, 255, 255);"><pre name="code" class="java"><pre name="code" class="java">public class ip3 {
	public static void main(String[] args) throws IOException{
		
		//1.创建UDP Socket,建立端点
		DatagramSocket ds = new DatagramSocket(10001);//定义了一个标示端口
		
		//2.定义数据包,用于存储数据
		byte[] b = new byte[1024];
		
		DatagramPacket dp = new DatagramPacket(b,b.length);
		//3.通过服务的receive方法将受到的数据存入数据包中
		ds.receive(dp);
		//4.通过数据包的方法获取其中的数据
		
		String ip = dp.getAddress().getHostAddress();
		String data = new String(dp.getData(),0,dp.getLength());;
		int port = dp.getPort();
		System.out.println(data);
		
		//关闭资源
		ds.close();	
	}

}</span>

 

 
 

 

  二、TCP特点:
        1、建立连接,形成传输数据的通道

        2、在连接中进行大量数据的传

        3、通过三次握手完成连接、是可靠协议

        4、必须建立连接,效率会稍低

 

例子:电话通话,必须连接,对方同意才可以发送数据(不然就等待),不能丢失数据。

如:TCP客户端

 

<span style="font-size:18px;background-color: rgb(255, 255, 255);">public class ip4 {
	//tcp客户端连接
	public static void main(String[] args) throws  IOException{
		//创建客户端的socket服务,指定目的主机和端口
		Socket s = new Socket("10.172.8.174",10003);
		
		//为了发送数据,应该获取socket流中的输出流
		OutputStream o = s.getOutputStream();
		
		
		o.write("tcp lian jie".getBytes());
		
		s.close();	
	}

}</span>
<span style="font-size:18px;background-color: rgb(255, 255, 255);">TCP服务器:</span>
<span style="font-size:18px;background-color: rgb(255, 255, 255);"><pre name="code" class="java">public class ip5 {
	//tcp服务端接收数据
	public static void main(String[] args) throws Exception{
		//建立服务端socket服务,并监听一个端口
		ServerSocket ss = new ServerSocket(10005);
		
		//通过accept方法获取连接过来的客户端对象
		Socket s = ss.accept();
		
		//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
		InputStream in = s.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		System.out.println(new String(buf,0,len));
	
		s.close();//关闭客户端	
	}
</span>
}

4.Socket

Socket是网络驱动层提供给应用程序编程接口和一种机制。

Socket 是在应用程序中创建的,它是通过一种绑定机制与驱动程序建立关系,告诉自己所对应的 IP 和 Port。在网络上传输的每一个数据帧,必须包含发送者的 IP 地址和端口号。创建完 Socket 以后,应用程序写入到 Socket 的数据,由 Socket 交给驱动程序向网络上发送数据,计算机从网络上收到与某个 Socket 绑定的 IP 和 Port 相关的数据后,由驱动程序再交给 Socket ,应用程序就可以从这个 Socket 中读取接收到的数据。网络应用程序就是这样通过 Socket 发送和接收的。
 

 

 
 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值