JAVA知识点总结-18 网络编程

一.网络编程的三要素:

1.   ip:一个计算机标识,每个计算机只有一个,不可重复

2.   端口:每个程序会对应一个端口,用来通信,

  有效端口:0~65535,其中0~1024系统使用或保留端口


3. 协议:TCP,UDP


协议TCP和UDP的区别:

   UDP:

   把数据打成一个数据包,不需要建立链接

 数据包大小有限制,不能超过64K

 无连接,属于不可靠协议(数据可能丢失)

   无连接,效率高

  

   TCP:

   需要建立连接,形成通道

 数据可通过连接通道进行传输,无大小限制

 有链接,属于可靠协议

 有链接,效率低


1.InetAdress:IP地址描述类(对IP地址的获取和操作

 

public static InetAddress getByName(String host)( host: 可以是主机名,也可以是IP地址的字符串表现形式)

public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。

public String getHostName()获取此 IP 地址的主机名。


2.Socket( 也叫 socket 编程,套接字编程,网络编程 )


socket通信机制:

通信两端都有Socket

网络通信其实就是Scoket通信

数据在两个Scoket间通过IO传输


3.UDP通信步骤:

         

发送端步骤:

/*

  * UDP发送数据的步骤:

  * A:创建UDP发送数据端Socket对象

  * B:创建数据包,并给出数据,把数据打包

  * C:通过Socket对象发送数据包

  * D:释放资源

  */

 


 接收端步骤:

/*

  * UDP协议接收数据步骤:

  * A:创建UDP接收数据端Socket对象

  * B:创建一个接收数据的数据包

  * C:接收数据,数据在数据包中

  * D:解析数据包,并把数据显示在控制台

  * E:释放资源

  */

  

// 1.创建发送端socket对象
		DatagramSocket ds = new DatagramSocket();

		InetAddress address = InetAddress.getByName("192.168.20.254");
		int port = 9999;

		// 2.创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		String line;
		while ((line = sc.nextLine()) != null) {
			// 键盘录入的数据line
			byte[] buf = line.getBytes();
			int length = buf.length;
			DatagramPacket dp = new DatagramPacket(buf, length, address, port);

			// 发送数据包
			ds.send(dp);
// 1.创建发送端socket对象
		DatagramSocket ds = new DatagramSocket();

		InetAddress address = InetAddress.getByName("192.168.20.254");
		int port = 9999;

		// 2.创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		String line;
		while ((line = sc.nextLine()) != null) {
			// 键盘录入的数据line
			byte[] buf = line.getBytes();
			int length = buf.length;
			DatagramPacket dp = new DatagramPacket(buf, length, address, port);

			// 发送数据包
			ds.send(dp);// 创建接收端socket对象
		DatagramSocket ds = new DatagramSocket();

		// 接受来自客户端的数据
		while (true) {
			// 创建数据包
			byte[] buf = new byte[1024];
			int length = buf.length;
			DatagramPacket dp = new DatagramPacket(buf, length);

			// 接受来自客户端的数据
			ds.receive(dp);

			// 解析数据包中的数据
			byte[] data = dp.getData();
			int len = dp.getLength();
			System.out.println(new String(data, 0, len));

 

4.TCP通讯步骤

/*

 * TCP协议发送数据步骤:

 * A:创建TCP协议发送端Socket对象

 * 指定服务器IP及端口

 Socket sk = new Socket("192.168.3.120" , 9527) ;

 * B:获取输出流,并写数据

 OutputStream outputStream = sk.getOutputStream() ;

 outputStream.write("hello,TCP我来了".getBytes()) ;

 * C:释放资源

 sk.close() ;

 *

 * java.net.ConnectException: Connection refused: connect

 * TCP协议是不能直接运行客户端的,必须先运行服务器。因为他是一种可靠的协议。

 */

 

 接收端:

 /*

 * TCP协议接收数据步骤:

 * A:创建TCP协议接收端Socket对象

   ServerSocket ss = new ServerSocket(9527) ;

 * B:监听客户端连接

   Socket sk = ss.accept() ;

 * C:获取输入流,并读取数据,显示在控制台

 // 读取数据

byte[] bytes = new byte[1024] ;

int len = inputStream.read(bytes) ;

// public InetAddress getInetAddress()获取IP地址

InetAddress inetAddress = sk.getInetAddress() ;

String ip = inetAddress.getHostAddress() ;

// 输出

System.out.println(ip + "发来数据是: " + new String(bytes , 0 , len));

 * D:释放资源

 sk.close() ;

 */


//创建tcp客户端socket对象
		Socket sk = new Socket("192.168.20.254", 10010);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		String line;
		while ((line=sc.nextLine())!=null) {
			//往通道中写数据,一次写一行
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		sk.close();	//创建服务器端的socket对象
		ServerSocket ss = new ServerSocket(10010);
		
		//监听客户端连接
		Socket sk = ss.accept();
		
		//从sk的通道中读取数据,一次读取一行
		BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
		
		//一次读取一行数据
		String line;
		while ((line=br.readLine())!=null) {
			//line就是已经读取到的数据,我们现在需要将line这个数据写入文件
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		sk.close();
		bw.close();
		br.close();










你可能感兴趣的:(JAVA)