java之网络编程及集合一

InetAddress类

封装了一个IP对象

方法

getAddress():获取此InetAddress对象的IP地址
getLocalHost():返回本地主机
getHostAddress():返回IP地址字符串
getHostName():获取主机名
getAllByName(String host):在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组

import java.net.InetAddress;  
import java.net.UnknownHostException;  
import java.util.Arrays;  
  
public class Test01 {  
    public static void main(String[] args) throws UnknownHostException {  
        InetAddress in1=InetAddress.getLocalHost();  
        //使用对象方法  
        System.out.println("获取IP地址:"+in1.getHostAddress());  
        System.out.println("获取主机名称:"+in1.getHostName());  
        byte[] by1=in1.getAddress();  
        System.out.println(Arrays.toString(by1));  
        //获取对象方法  
        InetAddress[] ip1=InetAddress.getAllByName("www.taobao.com");  
        for(InetAddress ip:ip1) {  
            System.out.println(ip.getHostAddress()+"==="+ip.getHostName());  
        }  
    }  
} 

TCP协议

基于客户端和服务器,先开启服务器,再开启客户端,这样才能接收到信息。

客户端:socket对象,在创建对象时,要指定IP地址和端口号

服务器:serversocket对象,在创建对象时指定监听的端口,在获取客户端的socket对象时,通过accept方法

  • 数据的收发都是通过流完成的,所有的数据信息都可以通过socket获取输入输出流(getInputStream,getOutputStream)

服务器

import java.io.IOException;  
import java.io.InputStream;  
import java.net.ServerSocket;  
import java.net.Socket;  
  
public class Server {  
    public static void main(String[] args) throws IOException {  
        //创建Serversocket对象  
        ServerSocket server1=new ServerSocket(10086);  
        //通过accept方法获取连接的socket对象  
        Socket client=server1.accept();  
        //获取客户端发送消息  
        InputStream in=client.getInputStream();  
        //读取信息    
        byte[] buf=new byte[1024];  
        int len=in.read(buf);  
        //分析  
        System.out.println(new String(buf,0,len));  
        //关闭资源  
        in.close();  
        client.close();  
    }  
} 

客户端

import java.io.IOException;  
import java.io.OutputStream;  
import java.net.Socket;  
import java.net.UnknownHostException;  
  
public class Client {  
    public static void main(String[] args) throws UnknownHostException, IOException {  
        //创建客户端socket对象  
        Socket client=new Socket("192.168.101.45",10861);  
        //创建流对象,发送信息  
        OutputStream os=client.getOutputStream();  
        //写信息  
        os.write("小弟弟".getBytes());  
        //关闭资源  
        os.close();  
        client.close();  
    }  
}

UDP协议

用户数据报,基于发送方和接受方 都是通过DatagrameSocket对象去指定

发送端

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 Send {  
    public static void main(String[] args) throws IOException {  
        //创建发送对象  
        DatagramSocket send=new DatagramSocket();  
        //构建发送包对象  
        String str="你真帅";  
        byte[] buf=str.getBytes();  
        int len=buf.length;  
        InetAddress in=InetAddress.getLocalHost();  
        //接收方端口  
        int port=10001;  
        DatagramPacket  d=new DatagramPacket(buf, len,in,port);  
        //发送消息  
        send.send(d);  
    }  
} 

接收端

import java.io.IOException;  
import java.net.DatagramPacket;  
import java.net.DatagramSocket;  
import java.net.InetAddress;  
  
public class Recive {  
    public static void main(String[] args) throws IOException { 
        //创建接收对象
        DatagramSocket r=new DatagramSocket(10001);  
        //创建接收包对象
        byte[] buf=new byte[1024];  
        DatagramPacket d=new DatagramPacket(buf, buf.length);
        //接收信息
        r.receive(d);  
        //分析数据
        InetAddress in=d.getAddress();  
        byte[] buff=d.getData();  
        int lne=d.getLength();  
        int port=d.getPort();  
        String data=new String(buff,0,lne);  
        System.out.println(in.getHostName()+"==="+data+"===="+port);  
          
    }  
} 

区别

tcp:面向有连接,安全,发送数据无长度限制,发送速度慢

udp:面向无连接,不安全,发送的数据长度有限制,发送速度快,资源消耗小

URL

网址:http://192.168.1.1/login?uname=zhangsan&pwd=123

URL结构:

协议:http

主机:192.168.1.1

端口号:80,默认端口

资源路径:/login (域名后,问号前的称之为资源路径)

请求参数:uname=zhangsan&pwd=123 (问号后的内容)

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URL;  
import java.net.URLConnection;  
  
public class Test04 {  
    public static void main(String[] args) throws IOException {  
        URL url=new URL("https://www.sina.com.cn/");  
        //通过资源对象获取到连接该资源的连接对象  
        URLConnection url1=url.openConnection();  
        //打开连接  
        url1.connect();  
        System.out.println("连接超时设置:"+url1.getConnectTimeout());  
        System.out.println("获取内容的类型:"+url1.getContentType());  
        System.out.println("返回内容的长度"+url1.getContentLength());  
        System.out.println("返回date标头字段的值:"+url1.getDate());  
        BufferedReader bd=new BufferedReader(new InputStreamReader(url1.getInputStream(),"utf-8"));  
        StringBuilder s=new StringBuilder();  
        String str="";  
        while((str=bd.readLine())!=null) {  
            s.append(str);  
            s.append("\n\t");  
        }  
        System.out.println(s.toString());  
    }  
}

集合

使用集合的原因:在大多数应用场景中,数据都是动态的,使用数组存储会浪费空间,效率低;而集合框架可以根据不同的应用场景来使用,本质上而言不同的集合对象底层的存储实现方案不同。

在这里插入图片描述

迭代器:1.Iterable:java.lang包下的接口,实现改接口就能foreach循环遍历

​ 2.Iterator:java.util包下的接口,迭代器,用来迭代当前集合对象

collection

定义:public interface Collection extends Iterable

方法:

add():添加元素
addAll():添加集合
clear():清空所有元素
remove():删除一个元素
removeAll():移除集合
retainAll():保留集合
isEmpty():是否为空
size():当前集合元素个数
contains():是否包含该元素
containsAll():是否包含集合
import java.util.ArrayList;  
import java.util.Collection;  
@SuppressWarnings("all") //去除警告 
public class Test01 {  
    public static void main(String[] args) {  
        Collection coll=new ArrayList();  
        //添加元素  
        coll.add("阿锋");  
        coll.add("方法");  
        coll.add("fds");  
        System.out.println(coll);  
        Collection coll1=new ArrayList();  
        coll1.add("阿聪");  
        coll1.add("sjj");  
        coll.addAll(coll1);  
        System.out.println(coll);  
        //删除元素  
        coll.remove("阿锋");  
        System.out.println(coll);  
        //删除集合外的元素  
        //coll.retainAll(coll1);  
        //System.out.println(coll);  
        //删除集合  
        coll.removeAll(coll1);  
        System.out.println(coll);  
        System.out.println("查看是否为空:"+coll.isEmpty());  
        System.out.println("查看当前集合个数:"+coll.size());  
        System.out.println("查看当前集合是否包含:"+coll.contains("阿聪"));  
        System.out.println("查看当前集合是否包含:"+coll.containsAll(coll1));  
    }  
} 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值