Java网络基础和Socket通信基础

时间:2025-11-24 01:53:30 java语言

Java网络基础和Socket通信基础

  导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看Java网络基础和Socket通信基础,希望对大家有所帮助。

  一、网络基础

  1、InetAddress

  InetAddress构造器私有,可以通过多种方式获得inetAddress对象

  InetAddress ip = InetAddress.getLocalHost();/pic/p>

  ip = InetAddress.getByName("100.64.141.89");/pic/p>

  String name = ip.getHostName();/pic/p>

  2、URL统一资源定位符

  典型构成:1、网络协议(/pic/myServlet);3、端口号(80);4、资源路径(crm/index.jsp);5、查询地址(gid=117)

  /pic/p>

  URL url = new URL(str);

  String protocol = url.getProtocol();/pic/p>

  String host = url.getHost();/pic/p>

  int port = url.getPort();/pic/p>

  对资源文件的一般操作

  String file = url.getFile();/pic/p>

  InputStream is = url.openStream();/pic/p>

  对URL地址进行转码,解码,防止乱码

  String str1 = URLEncoder.encode(str, "UTF-8");/pic/p>

  String str2 = URLDecoder.decode(str1, "UTF-8");/pic/p>

  3、HttpURLConnection

  继承URLConnection类;Http协议简介 http是一个无状态协议,请求、响应协议由请求头和响应头构成 。

  ①请求头: 请求方法:get post put.....

  ②响应头 响应状态码:status code:200(正常响应) 400~(404,405请求资源异常,不存在,请求响应格式不一致) 500~(500服务器内部异常)

  /pic/p>

  String str3 = "/uploadfile/2017/0809/20170809085944351.jpg";

  URL url2 = new URL(str3);

  /pic/p>

  HttpURLConnection conn = (HttpURLConnection) url2.openConnection();/pic/p>

  /pic/p>

  /pic/p>

  /pic/p>

  /pic/pic/p>

  /pic/pic/p>

  /pic/p>

  /pic/pic/p>

  /pic/p>

  /pic/p>

  if (code == HttpURLConnection.HTTP_OK) {

  InputStream is1 = conn.getInputStream();

  FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\Users\lx\Desktop\test\mn.jpg"));

  BufferedInputStream bfi = new BufferedInputStream(is1);

  BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);

  int len;

  byte[] bs = new byte[1024];

  while((len=bfi.read(bs))!=-1){

  bfo.write(bs, 0, len);

  bfo.flush();

  }

  }

  二、Socket通讯:

  1、TCP/IP

  IP:InternetProtocol 网络协议,支撑主机之间通讯的基本协议,如果需要实现主机之间的消息安全传输,通常会结合TCP协议共同使用。全称为TCP/IP。都是传输层协议。

  TCP:传输控制协议,能保证数据消息的在主机之间安全传输,三次握手,四次挥手。是一个安全传输数据协议,所以一般用于数据传输的准确性,安全性较高的应用,但是效率较低,如:视频通话。

  C/S 架构: Client/Server 客户端/服务器模式

  B/S 架构: Browser/Server浏览器/服务器模式

  服务器端:

  1、创建serverSocket,此套接字为服务器专用,构造器应当包含端口号,以供其他主机连接。

  2、监听套接字,并获得连接:Socket socket = serverSocket.accept( );

  3、获取套接字输出流:socket.getOutputStream( );

  ServerSocket serverSocket = new ServerSocket(9999);

  System.out.println("服务器开启");

  while (true) {

  Socket socket = serverSocket.accept();

  System.out.println("客户端已经连接" + socket.getInetAddress());

  PrintStream ps = new PrintStream(socket.getOutputStream());

  ps.print("欢迎使用socket服务器");

  }

  客户端

  1、利用构造器获取以供连接的套接字,属性包含目标IP和端口号

  2、获取套接字里面的输入流:socket.getInputStreeam( );

  Socket socket = new Socket("127.0.0.1", 9999);

  InputStreamReader isr = new InputStreamReader(socket.getInputStream());

  BufferedReader br = new BufferedReader(isr);

  String msg = br.readLine();

  System.out.println(msg);

  2、UDP

  UDP:user datagram Protocol 用户数据协议,无法保证数据的安全性,但是可以提交数据传输的效。

  接收数据:为阻塞式,需要单独作为一个线程

  1、创建网络通道datagramSocket,应当是包含端口地址的构造器

  2、创建数据包datagramPacket ,其中构造方法必须包含一个空的字符缓冲区,偏移量等信息。

  3、通过datagramSocket.receiver(datagramPacket);接受数据,向数据包写入数据。

  4、获取数据包内容 new String(datagramPacket.getData() , datagramPacket.getOffset(),datagramPacket.getLength());

  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, b.length);

  datagramSocket.receive(datagramPacket);/pic/p>

  String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

  datagramPacket.getLength());

  System.out.println("接受到的数据是" + string);

  }

  }

  发送数据:

  1、创建网络通道datagramSocket,构造器不需写入

  2、创建数据包 datagramPacket,构造方法里面包含需要写入的字节数组,偏移量,目标地址,目标端口号,当然也可以通过set方式设置目标地址地址等信息

  3、发送数据报 datagramSocket.send(datagramPacket);

  public static void main(String[] args) throws IOException {

  /pic/p>

  DatagramSocket datagramSocket = new DatagramSocket();

  /pic/p>

  String message="nnnnnn";

  DatagramPacket datagramPacket = new DatagramPacket(

  message.getBytes(), message.getBytes().length,

  InetAddress.getByName("192.168.46.19"),

  2345);

  datagramSocket.send(datagramPacket);

  datagramSocket.close();

  }

  3、UDP多播广播

  发送数据:

  1、创建多播广播通道 new MulticastSocket( );

  2、获取组播地址并将广播加入此地址 multicastSocket.jionGroup( InterAddress.getByName("266.81.9.8") );

  3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端口号。当然可以不用在构建方法添加ip和端口号。

  4、发送消息:multicastSocket.send(datagramPacket);

  public static void main(String[] args) throws IOException {

  MulticastSocket multicastSocket = new MulticastSocket();

  InetAddress group = InetAddress.getByName("226.81.9.8");

  multicastSocket.joinGroup(group);

  String content = "刷屏100遍";

  DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);

  dp.setAddress(group);

  dp.setPort(2426);

  multicastSocket.send(dp);

  }

  接收数据:阻塞式,需要单独作为一个线程

  1、创建多播广播通道:new MuliticastSocket(2426); 构造方法应当包含开启的端口号

  2、获取广播地址,并加入此广播地址 muliticast.jionGroup(InterAddress.getByName("192.22.22.2"));

  3、创建你个空的btye[]数组。和一个datdagramPacke对象。包含btye[]相关信息

  4、接收数据:mutilicastSocket.receive(datagramPacket);

  5、读取datagramPacket内容:利用String的构造方法

  public static void main(String[] args) throws IOException {

  MulticastSocket ms= new MulticastSocket(2426);

  InetAddress group = InetAddress.getByName("226.81.9.8");

  ms.joinGroup(group);

  byte[] b = new byte[1024];

  while (true) {

  DatagramPacket datagramPacket = new DatagramPacket(b, b.length);

  ms.receive(datagramPacket);/pic/p>

  String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

  datagramPacket.getLength());

  System.out.println(datagramPacket.getAddress()+"" + string);

  }

  4、NIO

  NIO是jdk1.4之后引入的一套全新的IO API,处理数据的方式不同于传统IO,传统IO的处理数据的方式以字节为单位,而NIO是一个Buffer(数据块) 为单位,传统IO属于阻塞式(流在读取数据时如果未读到时,程序会处于阻塞状态);而NIO的处理的方式为非阻塞式方式允许(底层为信号通讯),NIO可以在单线程应用中处理多个客户请求。

【Java网络基础和Socket通信基础】相关文章:

网络通信基础知识02-07

Java语言的基础12-08

java编程基础09-22

java语法基础09-27

java语言基础07-19

java基础总结03-06

Java基础语法12-11

Java基础:抽象类和接口12-17

java教程之Java编程基础12-06