2023年8月3日发(作者:)
Java基础,Socket通信⼊门学习 ⼀、⽹络基础 1、InetAddress InetAddress构造器私有,可以通过多种⽅式获得inetAddress对象 InetAddress ip=alHost();//获取本机IP ip=ame("100.64.141.89");//通过名字获取指定地址IP String name=tName();//通过IP获取IP名字 2、URL统⼀资源定位符 典型构成:1、⽹络协议();2、主机地址(192.168.46.20/myServlet);3、端⼝号(80);4、资源路径(crm/);5、查询地址(gid=117) //构造器多种,可以采⽤指定URL连接构造⼀个URL,也可以使协议,⽤端⼝号,⽂件名等信息构成URL String str="192.168.46.254:8888/easyBuy/crm/"; URL url=new URL(str); String protocol=tocol();// 获取协议 String host=t();// 主机名 int port=t();//端⼝号 对资源⽂件的⼀般操作 String file=e();//获取资源中包含的⽂件名称 InputStream is=ream();//打开此URL连接(URLConnection),并获取连接的输⼊流( putStream()) 对URL地址进⾏转码,解码,防⽌乱码 String str1=(str, "UTF-8");//对str字符串进⾏UTF-8转码 String str2=(str1, "UTF-8");//解码 3、HttpURLConnection 继承URLConnection类;Http协议简介 http是⼀个⽆状态协议,请求、响应协议由请求头和响应头构成 。 ①请求头: 请求⽅法:get ②响应头 响应状态码:status code:200(正常响应) 400~(404,405请求资源异常,不存在,请求响应格式不⼀致) 500~(500服务器内部异常) //利⽤HttpURL协议下载⽂件 String str3="2cto/uploadfile/2018/0505/"; URL url2=new URL(str3); // 打开⼀个URL连接 HttpURLConnection conn=(HttpURLConnection) nnection();//获取⼀个连接(URLConnection) // 设置请求⽅法 //uestMethod("GET"); // uestProperty("Accep-Language", "zh-en"); //dTimeout(10000);// 设置读取超时时间,可以默认 // nput(true);// 打开输⼊和输出,可以不设置,默认true //utput(true); //int code=ponseCode();// 获取响应状态码 // n(code); // 判断是否响应成功 if (code==_OK) { InputStream is1=utStream(); FileOutputStream fileOutputStream=new FileOutputStream(new File("C:UserslxDesktop ")); BufferedInputStream bfi=new BufferedInputStream(is1); BufferedOutputStream bfo=new BufferedOutputStream(fileOutputStream); int len; byte[] bs=new byte[1024]; while((len=(bs))!=-1){ (bs, 0, len); (); } } ⼆、Socket通讯: 1、TCP/IP IP:InternetProtocol ⽹络协议,⽀撑主机之间通讯的基本协议,如果需要实现主机之间的消息安全传输,通常会结合TCP协议共同使⽤。全称为。都是传输层协议。 TCP:传输控制协议,能保证数据消息的在主机之间安全传输,三次握⼿,四次挥⼿。是⼀个安全传输数据协议,所以⼀般⽤于数据传输的准确性,安全性较⾼的应⽤,但是效率较低,如:视频通话。 C/S 架构: Client/Server 客户端/服务器模式 B/S 架构: Browser/Server 浏览器/服务器模式 服务器端: 1、创建serverSocket,此套接字为服务器专⽤,构造器应当包含端⼝号,以供其他主机连接。 2、监听套接字,并获得连接:Socket socket=( ); 3、获取套接字输出流:putStream( ); ServerSocket serverSocket=new ServerSocket(9999); n("服务器开启"); while (true) { Socket socket=(); n("客户端已经连接" + tAddress()); PrintStream ps=new PrintStream(putStream()); ("欢迎使⽤socket服务器"); } 客户端 1、利⽤构造器获取以供连接的套接字,属性包含⽬标IP和端⼝号 2、获取套接字⾥⾯的输⼊流:utStreeam( ); Socket socket=new Socket("127.0.0.1", 9999); InputStreamReader isr=new InputStreamReader(utStream()); BufferedReader br=new BufferedReader(isr); String msg=ne(); n(msg); 2、UDP UDP:user datagram Protocol ⽤户数据协议,⽆法保证数据的安全性,但是可以提交数据传输的效。 接收数据:为阻塞式,需要单独作为⼀个线程 1、创建⽹络通道datagramSocket,应当是包含端⼝地址的构造器 2、创建数据包datagramPacket ,其中构造⽅法必须包含⼀个空的字符缓冲区,偏移量等信息。 3、通过er(datagramPacket);接受数据,向数据包写⼊数据。 4、获取数据包内容 new String(a() , set(),gth()); public static void main(String[] args) throws IOException { DatagramSocket datagramSocket=new DatagramSocket(2345); byte[] b=new byte[1024]; while (true) { DatagramPacket datagramPacket=new DatagramPacket(b, ); e(datagramPacket);//接受数据 String string=new String(a(), set(), gth()); n("接受到的数据是" + string); } } 发送数据: 1、创建⽹络通道datagramSocket,构造器不需写⼊ 2、创建数据包 datagramPacket,构造⽅法⾥⾯包含需要写⼊的字节数组,偏移量,⽬标地址,⽬标端⼝号,当然也可以通过set⽅式设置⽬标地址地址等信息 3、发送数据报 (datagramPacket); public static void main(String[] args) throws IOException { //创建⼀个⽹络通道 DatagramSocket datagramSocket=new DatagramSocket(); //将数据打包成数据报包 String message="nnnnnn"; DatagramPacket datagramPacket=new DatagramPacket( es(), es().length, ame("192.168.46.19"), 2345); (datagramPacket); (); } 3、UDP多播⼴播 发送数据: 1、创建多播⼴播通道 new MulticastSocket( ); 2、获取组播地址并将⼴播加⼊此地址 oup( ame("266.81.9.8") ); 3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端⼝号。当然可以不⽤在构建⽅法添加ip和端⼝号。 4、发送消息:(datagramPacket); public static void main(String[] args) throws IOException { MulticastSocket multicastSocket=new MulticastSocket(); InetAddress group=ame("226.81.9.8"); oup(group); String content="刷屏100遍"; DatagramPacket dp=new DatagramPacket(es(),es().length); ress(group); t(2426); (dp); } 接收数据:阻塞式,需要单独作为⼀个线程 1、创建多播⼴播通道:new MuliticastSocket(2426); 构造⽅法应当包含开启的端⼝号 2、获取⼴播地址,并加⼊此⼴播地址 oup(ame("192.22.22.2")); 3、创建你个空的btye[]数组。和⼀个datdagramPacke对象。包含btye[]相关信息 4、接收数据:e(datagramPacket); 5、读取datagramPacket内容:利⽤String的构造⽅法 public static void main(String[] args) throws IOException { MulticastSocket ms=new MulticastSocket(2426); InetAddress group=ame("226.81.9.8"); oup(group); byte[] b=new byte[1024]; while (true) { DatagramPacket datagramPacket=new DatagramPacket(b, ); e(datagramPacket);//接受数据 String string=new String(a(), set(), gth()); n(ress()+"" + string); } 4、NIO NIO是jdk1.4之后引⼊的⼀套全新的IO API,处理数据的⽅式不同于传统IO,传统IO的处理数据的⽅式以字节为单位,⽽NIO是⼀个Buffer(数据块) 为单位,传统IO属于阻塞式(流在读取数据时如果未读到时,程序会处于阻塞状态);⽽NIO的处理的⽅式为⾮阻塞式⽅式允许(底层为信号通讯),NIO可以在单线程应⽤中处理多个客户请求。
2023年8月3日发(作者:)
Java基础,Socket通信⼊门学习 ⼀、⽹络基础 1、InetAddress InetAddress构造器私有,可以通过多种⽅式获得inetAddress对象 InetAddress ip=alHost();//获取本机IP ip=ame("100.64.141.89");//通过名字获取指定地址IP String name=tName();//通过IP获取IP名字 2、URL统⼀资源定位符 典型构成:1、⽹络协议();2、主机地址(192.168.46.20/myServlet);3、端⼝号(80);4、资源路径(crm/);5、查询地址(gid=117) //构造器多种,可以采⽤指定URL连接构造⼀个URL,也可以使协议,⽤端⼝号,⽂件名等信息构成URL String str="192.168.46.254:8888/easyBuy/crm/"; URL url=new URL(str); String protocol=tocol();// 获取协议 String host=t();// 主机名 int port=t();//端⼝号 对资源⽂件的⼀般操作 String file=e();//获取资源中包含的⽂件名称 InputStream is=ream();//打开此URL连接(URLConnection),并获取连接的输⼊流( putStream()) 对URL地址进⾏转码,解码,防⽌乱码 String str1=(str, "UTF-8");//对str字符串进⾏UTF-8转码 String str2=(str1, "UTF-8");//解码 3、HttpURLConnection 继承URLConnection类;Http协议简介 http是⼀个⽆状态协议,请求、响应协议由请求头和响应头构成 。 ①请求头: 请求⽅法:get ②响应头 响应状态码:status code:200(正常响应) 400~(404,405请求资源异常,不存在,请求响应格式不⼀致) 500~(500服务器内部异常) //利⽤HttpURL协议下载⽂件 String str3="2cto/uploadfile/2018/0505/"; URL url2=new URL(str3); // 打开⼀个URL连接 HttpURLConnection conn=(HttpURLConnection) nnection();//获取⼀个连接(URLConnection) // 设置请求⽅法 //uestMethod("GET"); // uestProperty("Accep-Language", "zh-en"); //dTimeout(10000);// 设置读取超时时间,可以默认 // nput(true);// 打开输⼊和输出,可以不设置,默认true //utput(true); //int code=ponseCode();// 获取响应状态码 // n(code); // 判断是否响应成功 if (code==_OK) { InputStream is1=utStream(); FileOutputStream fileOutputStream=new FileOutputStream(new File("C:UserslxDesktop ")); BufferedInputStream bfi=new BufferedInputStream(is1); BufferedOutputStream bfo=new BufferedOutputStream(fileOutputStream); int len; byte[] bs=new byte[1024]; while((len=(bs))!=-1){ (bs, 0, len); (); } } ⼆、Socket通讯: 1、TCP/IP IP:InternetProtocol ⽹络协议,⽀撑主机之间通讯的基本协议,如果需要实现主机之间的消息安全传输,通常会结合TCP协议共同使⽤。全称为。都是传输层协议。 TCP:传输控制协议,能保证数据消息的在主机之间安全传输,三次握⼿,四次挥⼿。是⼀个安全传输数据协议,所以⼀般⽤于数据传输的准确性,安全性较⾼的应⽤,但是效率较低,如:视频通话。 C/S 架构: Client/Server 客户端/服务器模式 B/S 架构: Browser/Server 浏览器/服务器模式 服务器端: 1、创建serverSocket,此套接字为服务器专⽤,构造器应当包含端⼝号,以供其他主机连接。 2、监听套接字,并获得连接:Socket socket=( ); 3、获取套接字输出流:putStream( ); ServerSocket serverSocket=new ServerSocket(9999); n("服务器开启"); while (true) { Socket socket=(); n("客户端已经连接" + tAddress()); PrintStream ps=new PrintStream(putStream()); ("欢迎使⽤socket服务器"); } 客户端 1、利⽤构造器获取以供连接的套接字,属性包含⽬标IP和端⼝号 2、获取套接字⾥⾯的输⼊流:utStreeam( ); Socket socket=new Socket("127.0.0.1", 9999); InputStreamReader isr=new InputStreamReader(utStream()); BufferedReader br=new BufferedReader(isr); String msg=ne(); n(msg); 2、UDP UDP:user datagram Protocol ⽤户数据协议,⽆法保证数据的安全性,但是可以提交数据传输的效。 接收数据:为阻塞式,需要单独作为⼀个线程 1、创建⽹络通道datagramSocket,应当是包含端⼝地址的构造器 2、创建数据包datagramPacket ,其中构造⽅法必须包含⼀个空的字符缓冲区,偏移量等信息。 3、通过er(datagramPacket);接受数据,向数据包写⼊数据。 4、获取数据包内容 new String(a() , set(),gth()); public static void main(String[] args) throws IOException { DatagramSocket datagramSocket=new DatagramSocket(2345); byte[] b=new byte[1024]; while (true) { DatagramPacket datagramPacket=new DatagramPacket(b, ); e(datagramPacket);//接受数据 String string=new String(a(), set(), gth()); n("接受到的数据是" + string); } } 发送数据: 1、创建⽹络通道datagramSocket,构造器不需写⼊ 2、创建数据包 datagramPacket,构造⽅法⾥⾯包含需要写⼊的字节数组,偏移量,⽬标地址,⽬标端⼝号,当然也可以通过set⽅式设置⽬标地址地址等信息 3、发送数据报 (datagramPacket); public static void main(String[] args) throws IOException { //创建⼀个⽹络通道 DatagramSocket datagramSocket=new DatagramSocket(); //将数据打包成数据报包 String message="nnnnnn"; DatagramPacket datagramPacket=new DatagramPacket( es(), es().length, ame("192.168.46.19"), 2345); (datagramPacket); (); } 3、UDP多播⼴播 发送数据: 1、创建多播⼴播通道 new MulticastSocket( ); 2、获取组播地址并将⼴播加⼊此地址 oup( ame("266.81.9.8") ); 3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端⼝号。当然可以不⽤在构建⽅法添加ip和端⼝号。 4、发送消息:(datagramPacket); public static void main(String[] args) throws IOException { MulticastSocket multicastSocket=new MulticastSocket(); InetAddress group=ame("226.81.9.8"); oup(group); String content="刷屏100遍"; DatagramPacket dp=new DatagramPacket(es(),es().length); ress(group); t(2426); (dp); } 接收数据:阻塞式,需要单独作为⼀个线程 1、创建多播⼴播通道:new MuliticastSocket(2426); 构造⽅法应当包含开启的端⼝号 2、获取⼴播地址,并加⼊此⼴播地址 oup(ame("192.22.22.2")); 3、创建你个空的btye[]数组。和⼀个datdagramPacke对象。包含btye[]相关信息 4、接收数据:e(datagramPacket); 5、读取datagramPacket内容:利⽤String的构造⽅法 public static void main(String[] args) throws IOException { MulticastSocket ms=new MulticastSocket(2426); InetAddress group=ame("226.81.9.8"); oup(group); byte[] b=new byte[1024]; while (true) { DatagramPacket datagramPacket=new DatagramPacket(b, ); e(datagramPacket);//接受数据 String string=new String(a(), set(), gth()); n(ress()+"" + string); } 4、NIO NIO是jdk1.4之后引⼊的⼀套全新的IO API,处理数据的⽅式不同于传统IO,传统IO的处理数据的⽅式以字节为单位,⽽NIO是⼀个Buffer(数据块) 为单位,传统IO属于阻塞式(流在读取数据时如果未读到时,程序会处于阻塞状态);⽽NIO的处理的⽅式为⾮阻塞式⽅式允许(底层为信号通讯),NIO可以在单线程应⽤中处理多个客户请求。
发布评论