黑马程序员——网络编程

 ------- android培训java培训、期待与您交流! ----------

网络编程

一、网络编程的三要素
IP IP=网络号+主机号
端口 每个网络应用程序有有一个端口
协议 UDP/TCP协议

IP分类:
A类地址:1个网络号+3个主机号 政府使用
B类地址:2个网络号+2个主机号 事业单位(银行、学校)
C类地址:3个网络号+1个主机号 个人

二、InetAddress类
InetAddress没有构造函数,这是一个单例设计模式,提供了一个get方法获取InetAddress对象
InetAddress类的方法:
InetAddress.getLocalHost() 返回本机的IP地址对象
inetAddress.getHostAddress() 返回IP的字符串表现形式
inetAddress.getHostName() 获取主机名

getByName(String name) 在给定主机名、ip地址的情况下确定主机的IP地址。
getByName("IP"); inetAddress.getHostName() 通过IP获取主机名

三、UDP和TCP协议
UDP协议
将数据和目的地封装在数据包中,不需要建立连接。每个包大小不能超过64K。是不可靠的,速度快。
TCP协议
建立数据传输的通道,在连接中进行大量数据传输,通过三次握手完成,是可靠地,效率稍低。

四、UDP协议的使用
发送端的使用步骤:
1、创建DatagramSocket()对象
2、创建要传输的数据
3、创建数据包对象
4、发送数据包对象
5、关闭资源
<pre name="code" class="java">package it.heima.socket;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import java.net.SocketException;
import java.util.Scanner;


public class UdpDemo {

	public static void main(String[] args) throws SocketException, IOException {
	
		DatagramSocket datagramSocket=new DatagramSocket();<span style="white-space:pre">	</span>//创建DatagramSocket()对象
		
		outer:while(true){
			Scanner sc=new Scanner(System.in);<span style="white-space:pre">		</span>//创建数据
			String s=sc.nextLine();
			while(s!=null){
				
				byte[] buf = s.getBytes();<span style="white-space:pre">	</span>
<span style="white-space:pre">				</span>//创建数据包
				DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9090);<span style="white-space:pre">	</span>
				datagramSocket.send(datagramPacket);<span style="white-space:pre">		</span>//发送数据包
				if(s.equals("exit")){
					break outer;
				}
				s=null;
			}
		}
		datagramSocket.close();<span style="white-space:pre">	</span>//关闭资源
	}

}


 
 
接收端的使用步骤:
1、创建DatagramSocket()对象
2、创建要接收的数据的容器
3、创建接收数据包对象
4、接收数据包对象
5、获取接收缓冲数组内容
6、关闭资源
package it.heima.socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UddpServer {

	public static void main(String[] args) throws IOException {
		DatagramSocket datagramSocket=new DatagramSocket(9090);<span style="white-space:pre">	</span>//创建接收DatagramSocket()
		while(true){
			byte[] buf=new byte[1024];<span style="white-space:pre">	</span>//创建接收容器
			int length=buf.length;
			DatagramPacket datagramPacket=new DatagramPacket(buf, length);<span style="white-space:pre">	</span>//创建接收数据包
			
			datagramSocket.receive(datagramPacket);<span style="white-space:pre">		</span>//接收数据包
			
			byte[] buf2=datagramPacket.getData();<span style="white-space:pre">		</span>//获取数据包缓冲数组
			int length2=datagramPacket.getLength();<span style="white-space:pre">		</span>//获取数据的实际长度
			String s=new String(buf2,0,length2);<span style="white-space:pre">		</span>//输出
			if(s.equals("exit")){
				break;
			}
			System.out.println(s);
		}
		datagramSocket.close();
	}

}

总结:
UDP协议的接收和发送都是通过DatagramSocket()对象完成的
UDP协议接收端和发送端都有DatagramPacket()数据包的操作
UDP发送端的DatagramPackage()需要 byte数组(内容)、内容长度、发送的IP地址、接收端的端口号
UDP接收端的 DatagramPackage()只需要有存储byte数组和数组长度就可以了,但是DatagramSocket需要端口号

五、TCP协议的使用
TCP协议客户端使用:
1、创建客户端对象
2、创建流通道
3、创造接收或发送的byte数组
4、接收或发送数据
5、关闭资源
package it.heima.tcp2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.net.InetAddress;
import java.net.Socket;



public class SocketDemo {
	public static void main(String[] args) throws IOException {
		//1、创建Socket对象
		//2、创建流通道
		//3、接收
		//关闭资源
		Socket socket=new Socket(InetAddress.getLocalHost(), 8080);
		InputStream inputStream=socket.getInputStream();
		FileOutputStream fileOutputStream=new FileOutputStream("F:\\2.png");
		byte[] buf=new byte[1024];
		int length;
		while((length=inputStream.read(buf))!=-1){
			fileOutputStream.write(buf, 0, length);
		}
		fileOutputStream.close();
		socket.close();	
		
	}
}
TCP协议服务端的使用:
1、创建ServerSocket对象
2、等待客户端连接
3、创建流通道
4、创建byte数组来接收或发送数据
5、发送或接收数据
6、关闭资源
package it.heima.tcp2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.net.InetAddress;
import java.net.Socket;



public class SocketDemo {
	public static void main(String[] args) throws IOException {
		//1、创建Socket对象
		//2、创建流通道
		//3、接收
		//关闭资源
		Socket socket=new Socket(InetAddress.getLocalHost(), 8080);
		InputStream inputStream=socket.getInputStream();
		FileOutputStream fileOutputStream=new FileOutputStream("F:\\2.png");
		byte[] buf=new byte[1024];
		int length;
		while((length=inputStream.read(buf))!=-1){
			fileOutputStream.write(buf, 0, length);
		}
		fileOutputStream.close();
		socket.close();	
		
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值