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可以在单线程应⽤中处理多个客户请求。