Java---网络编程

目录

一、网络编程入门

(1)IP地址

(2)端口

(3)协议

二、网络编程的使用

1:InetAddress的介绍

2:UDP通信程序

(1)UDP发送数据

(2)UDP接受数据

3:TCP通信程序

(1)TCP发送数据

(2)TCP接受数据


一、网络编程入门

网络我相信大家都是学计算机的应该很了解,知道是什么,我就不多说了,网络编程的三要素:IP地址,端口,协议。

(1)IP地址

要想让网络上的计算机相互通信,那么你的计算机就要有一个唯一的标识,可以让其它的计算机找到,也就是说IP地址其实就是一个标识号。

(2)端口

网络的通信,本质上是两个应用程序的通信,每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了,也就是应用程序的标识。

端口号用两个字节表示的整数,取值范围是0-65535,其中0-1023的端口号用于一些知名的网络服务和应用;普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或者应用占用,会导致当前程序启动失败

(3)协议

通过计算机网络可以使多态计算机实现连接,位于同一个网络中的计算机正在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样,在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式,传输速率,传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换,常见的协议有UDP协议和TCP协议。

UDP协议:用户数据协议。UDP是无线连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时也不会向发送端反馈是否收到数据。
举个例子吧。例如视频会议通常采用的是UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响,但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

TCP协议:传输控制协议。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端和服务器端,由于客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”。
三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠
第一次握手:客户端向服务器端发出连接请求,等待服务器确认。
第二次握手:服务器端向客户端回送一个响应,通知客户端收到了连接请求
第三次握手:客户端再次向服务器端发送确认信息,确认连接

二、网络编程的使用

1:InetAddress的介绍

InetAddress这个类表示的是Internet协议(IP)地址

static InetAddress getByName(String host)  确定主机名的IP地址,主机名称可以是机器名称或者是IP地址
String getHostName()                     获取IP地址的主机名
String getHostAddress()                  返回文本显示的IP地址字符串

2:UDP通信程序

UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接受数据的对象。
因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念

(1)UDP发送数据

发送数据的步骤
(1)创建发送端的Socket对象
(2)创建数据,并把数据打包
(3)调用DatagramSocket对象的方法发送数据
(4)关闭发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class o1 {
   public static void main(String[] args) throws IOException {
	   //发送数据
	   DatagramSocket ds=new DatagramSocket();//数据包的类,打包
	   byte[] by="我正在发送数九".getBytes();//数据包
	   int len=by.length;//数据长度
	   InetAddress address=InetAddress.getLocalHost();
	   int port=10086;
       //下面这四个参数分别表示的是数据包,数据长度,IP地址,端口号
	   DatagramPacket dp=new DatagramPacket(by,len,address,port);
	   ds.send(dp);
	   ds.close();
   }
}

(2)UDP接受数据

UDP接受数据的步骤
(1)创建接收端的Socket对象
(2)创建一个数据包,用于接收数据
(3)调用DatagramSocket对象的方法接收数据
(4)解析数据包,并把数据在控制台显示
(5)关闭接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.*;

public class jieshou {
    public static void main(String[] args) throws IOException {
    	DatagramSocket ds=new DatagramSocket(10086);
    	//开始创建一个数据包
    	byte[] bys=new byte[1024];
    	DatagramPacket dp=new DatagramPacket(bys,bys.length);
    	ds.receive(dp);
    	byte[] data=dp.getData();
    	int len=data.length;
    	String s=new String(data,0,len);
    	System.out.println("接受的数据="+s);
    	ds.close();
    	
    }
}

3:TCP通信程序

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
Java对基于TCP协议的网络提供了良好的封装,使用Socket对象代表两端的通信端口,并通过Socket产生IO流来进行网络通信
Java为客户端提供了Socket类,为服务端提供了ServerSocket类

(1)TCP发送数据

TCP发送数据的步骤
(1)创建客户端的Socket对象
(2)获取输出流,写数据
(3)释放资源

 

import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

public class o1 {
   public static void main(String[] args) throws IOException {
	   Socket s=new Socket("192.168.2.248",10000);
	   OutputStream ou=s.getOutputStream();
	   ou.write("我要发送数据了".getBytes());
	   s.close();
   }
}

(2)TCP接受数据

TCP接受数据的步骤
(1)创建服务器端的Socket对象
(2)获取输入流读数据,并把数据显示在控制台上
(3)释放资源
import java.io.IOException;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.*;

public class jieshou {
    public static void main(String[] args) throws IOException {
    	ServerSocket s=new ServerSocket(10000);
    	Socket ss=s.accept();
    	InputStream i=ss.getInputStream();
    	byte[] by=new byte[1024];
    	int len=i.read(by);
    	String data=new String(by,0,len);
    	System.out.println("接受="+data);
    	ss.close();
    	s.close();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值