07网络编程

网络编程:

用于不同的计算之间进行数据传输

网络编程三要素

IP:设备在网络中的唯一标识
端口:应用在设备的唯一标识
协议:数据传输所要遵循的规范

注意:网络编程本质上就是应用和应用之间的数据传输
IP是可以发生变化(换了一个地方联网)
IP分为四部分,前三部分叫做网段(标识所在区域),最后一部分为主机号
协议常用UDP,TCP

Java提供了对IP地址操作的类InetAddress
static InetAddress getByName(String host) 确定主机名称的IP地址,主机名称可以是机器名称,也可以是Ip地址
String getHostName() 获取此IP地址的主机名
String getHostAddress() 返回IP地址的字符串

UPD接收端

1.创建对象 监听端口号
new DatagramSocket(int port)
2.创建数据包用于接收数据
new byte[1024];
new DatagramePacket(byte[] bytes,int length);
3.调用receive()
	DatagramSocket对象.receive(DatagramePacket对象)
4.关闭
	DatagramSocket对象.close();

UPD发送端

1.创建对象
	new DatagramSocket()
2.创建数据 把数据打成数据包,参数还需要ip,port
	"Hello,UDP".getBytes();
	new DatagramePacket(byte[] bytes,int length,ip,port);
3.调用send();
	DatagramSocket对象.send(DatagramePacket对象)
4.关闭
	DatagramSocket对象.close();

注意:如果一个类想要实现发送和接收,当前new DatagramSocket对象需要监听端口号
发送数据时,指定的端口号,是接收所需要监听的端口号

TCP客户端

1.创建对象
	new Socket(String host,int port)
2.创建流 准备数据
	"hello,tcp"。getBytes()
	Socket对象.getOutputStream();
3.调用write()
	IO流对象.write(字节数组)
4.关闭
	Socket对象.close()		

TCP服务端

1.创建对象
	new ServerSocket(int port);
2.监听端口号 获取Socket对象
	Socket socket=ServerSocket对象.accept();
3.获取流的对象
	socket.getInputStream();
4.调用read();
	IO对象.read()
5.关闭
	ServerSocket.close();

TCP中循环接收数据时阻塞问题:read()阻塞程序的执行
阻塞出现的原因:
发送的数据,循环读取,read()不能判断当前数据发送结束,所以read每读取一次数据都回去阻塞当前程序的运行,等待下一次数据的输入
如何解决:发送数据之后,socket调用shutDownOutput() 关闭发送流

注意:调用shutDownOutput可能会出现问题
如果需要循环发送和接收时,不能调用shutDownOutput,因为调用之后会把发送流关闭,之后不能在实现循环发送
如何解决:客户端和服务端约定数据的大小,new byte[大于约定的大小]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值