【Java网络】快速入门网络编程

JAVA Socket实现实时接收TCP消息,让你的服务端通信更高效! 本文主要介绍如何利用socket实现实时接收服务端发送的TCP消息。 阅读详情

网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。 —— 百度百科


Table of Contents

网络通信协议

IP管理类(InetAddress类)

基于UDP协议编程

DatagramSocket类

DatagramPacket类

实例-UDP发送端

实例-UDP接收端

基于TCP协议编程

Socket类

ServerSocket类

实例-TCP服务端

 实例-TCP客户端

TCP-文件上传

客户端

服务器


先来一张Java网络编程基础知识体系架构:

 


网络通信协议

现在来简单回忆一下,计算机网络的有关基础原理:

网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组,在学习具体协议之前首先了解一下TCP/IP协议组的层次结构。

在进行数据传输时,要求发送的数据与收到的数据完全一样,这时,就需要在原有的数据上添加很多信息,以保证数据在传输过程中数据格式完全一致。TCP/IP协议的层次结构比较简单,共分为四层,如图所示。

TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解。

  • 链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
  • 网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
  • 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
  • 应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。

要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示。

由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。

通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。

网络通信中的IP和端口:


 

IP管理类(InetAddress类)

功能:管理IP地址与主机名(域名)之间的转换,以及IP地址本身格式的转换(把32二进制转换为4个十进制数)。

静态方法:

  1. static InetAddress[] getAllByName(String host) 根据主机或者域名的名称,根据系统上配置的名称服务返回其IP地址数组。 
  2. static InetAddress getByAddress(byte[] addr) 给定原始IP地址返回 InetAddress对象。 
  3. static InetAddress getByAddress(String host, byte[] addr) 根据提供的主机名和IP地址创建InetAddress。 
  4. static InetAddress getByName(String host) 根据主机名、域名称确定主机的IP地址。
IP管理类的方法使用
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Main {
	public static void main(String[] args) throws UnknownHostException {
		ipAddress();
	}
	public static void ipAddress() throws UnknownHostException {
		//getLocalHost 获取本机的IP地址对象
		InetAddress address = InetAddress.getLocalHost();
		System.out.println("IP地址:"+address.getHostAddress());
		System.out.println("主机名:"+address.getHostName());

		//获取别人机器的IP地址对象。
 
		//可以根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。
		InetAddress address1 = InetAddress.getByName("KYLE");
		System.out.println("IP地址:"+address1.getHostAddress());
		System.out.println("主机名:"+address1.getHostName());

		InetAddress[]  arr = InetAddress.getAllByName("www.baidu.com");//域名
		for(InetAddress s:arr) { //输出该域名所表示的所有IP地址
			System.out.println(s);
		}
	}
public static void fun() throws UnknownHostException {
		//根据主机名或域名获取iP地址
		InetAddress ip01 = InetAddress.getByName("KYLE"); //根据主机名获取IP地址
		InetAddress ip02 = InetAddress.getByName("hackyle.net"); //根据域名获取主机的IP地址
		System.out.println(ip01); //KYLE/192.168.1.50
		System.out.println(ip02); //hackyle.net/116.62.148.72
		
		//将IP地址转换为字节数组
		byte[] byteIP = ip02.getAddress();
		
		//根据IP地址的字节形式和返回其IP
		InetAddress ip03 = InetAddress.getByAddress(byteIP);
		System.out.println(ip03); //输出:116.62.148.72	
	}
}

 


基于UDP协议编程

理解UDP:

  1. UDP(User Datagram Protocol)是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
  2. 简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
  3. 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
  4. 但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

特性:

  1. 将数据封装为数据包,面向无连接。
  2. 每个数据包大小限制在64K中
  3. 因为无连接,所以不可靠
  4. 因为不需要建立连接,所以速度快
  5. UDP通讯是不分服务端与客户端的,只分发送端与接收端。

UDP协议下的Socket相关类:

  1. java.net.DatagramPacket类:将数据包装起来
  2. java.net.DatagramSocket类:将数据包发送和接收

DatagramSocket类

构造方法:

DatagramSocket(int port) :数据报套接字并将其绑定到本地主机上的指定端口。

  1. 该构造方法既可用于创建接收端的DatagramSocket对象,又可以创建发送端的DatagramSocket对象;
  2. 在创建接收端的DatagramSocket对象时,必须要指定一个端口号,这样就可以监听指定的端口。

DatagramSocket() :据报套接字并将其绑定到本地主机上任何可用的端口。

  1. 该构造方法用于创建发送端的DatagramSocket对象;
  2. 在创建DatagramSocket对象时,并没有指定端口号,此时,系统会分配一个没有被其它网络程序所使用的端口号。

方法:

  1. void receive(DatagramPacket p):从此套接字接收数据报包;
  2. void send(DatagramPacket p):从此套接字发送数据报包

 

DatagramPacket类

构造方法:

DatagramPacket(byte[] buf, int length) :DatagramPacket,用来接收长度为 length 的数据包。

  1. 使用该构造方法在创建DatagramPacket对象时,指定了封装数据的字节数组和数据的大小,没有指定IP地址和端口号。
  2. 很明显,这样的对象只能用于接收端,不能用于发送端。
  3. 因为发送端一定要明确指出数据的目的地(ip地址和端口号),而接收端不需要明确知道数据的来源,只需要接收到数据即可。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

  1. 使用该构造方法在创建DatagramPacket对象时,不仅指定了封装数据的字节数组和数据的大小,还指定了数据包的目标IP地址(addr)和端口号(port)。
  2. 该对象通常用于发送端。
  3. 因为在发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样。

 

实例-UDP发送端

发送端的使用步骤:

1. 建立UDP的服务:启动插座(DatagramSocket)

2. 准备数据,把数据封装到数据包中发送。 发送端的数据包要带上ip地址与端口号:建立包(DatagramPacket)

3. 调用UDP的服务,发送数据:从插座中发送;

4. 关闭资源:关闭插座;

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.net.DatagramPacket;
import java.io.IOException;

//发送端
public class Sender {
	private static String ip = "116.62.148.72";
	private static int port = 9190;
	
	public static void main(String[] args) {
		InetAddress iaddress = null;
		DatagramSocket ds = null;
		System.out.println("Start sending...");
		try {
			iaddress = InetAddress.getByName(ip);
			ds = new DatagramSocket();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		}
		String data = "嗨,接收端。";
		
		try {
			DatagramPacket dp = new DatagramPacket(data.getBytes(),data.getBytes().length,iaddress,port);
			ds.send(dp);
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			ds.close();
			System.out.println("Send Finished...");
		}
	}
}

实例-UDP接收端

接收端的使用步骤

  1. 建立udp的服务:启用插座(DatagramSocket);
  2. 准备空 的数据 包接收数据:(byte[];DatagramPacket);
  3. 调用udp的服务接收数据:插座的对象receive存放于DatagramPacket对象的包中;
  4. 关闭资源:关闭插座;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.io.IOException;

public class Receiver {
	public static void main(String[] args) {
		DatagramSocket ds = null;
		DatagramPacket dp = null;
		System.out.println("Start receiving....");
		byte[] buf = new byte[1024];
		
		try {
			ds = new DatagramSocket(9190);
			dp = new DatagramPacket(buf,buf.length);
			ds.receive(dp);
			System.out.println(new String(buf,0,dp.getLength()));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			ds.close();
			System.out.println("Receive Finished....");
		}
		
	}
}

基于TCP协议编程

理解TCP:

  1. TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
  2. 在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
    1. 第一次握手,客户端向服务器端发出连接请求,等待服务器确认;
    2. 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;
    3. 第三次握手,客户端再次向服务器端发送确认信息,确认连接。
  3. 由于TCP协议的面向连接特性,它可以保证传输数据的安全性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被打开,因此,下载文件时必须采用TCP协议。

理解TCP3次握手建立连接:

  1. 发送方:你听得到吗(SYN)?
  2. 接收方:我听得到(ACK),你能听得到我吗(SYN)?
  3. 发送方:我听得到(ACK)。
  4. 此时双方都知道彼此具备收发数据的能力!

 

TCP通讯协议特点:

  1. 是基于IO流进行数据 的传输,面向连接(双方都确认存活才建立连接)。
  2. 进行数据传输的时候是没有大小限制的。
  3. 是面向连接,通过三次握手的机制保证数据的完整性。是可靠协议。
  4. 是面向连接的,所以速度慢。
  5. 是区分客户端与服务端的。

Socket类

功能:工作在客户端。专用于客户端去连接服务端。

构造方法:

  1. Socket(InetAddress address, int port):根据参数去连接在指定地址和端口上运行的服务器程序,参数address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。
  2. Socket(String host, int port):根据参数去连接在指定地址和端口上运行的服务器程序,其中参数host接收的是一个字符串类型的IP地址。

方法:

  1. int getPort():该方法返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号
  2. InetAddress getLocalAddress():该方法用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回
  3. void close():该方法用于关闭Socket连接,结束本次通信。在关闭socket之前,应将与socket相关的所有的输入/输出流全部关闭,这是因为一个良好的程序应该在执行完毕时释放所有的资源
  4. InputStream getInputStream():该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据
  5. OutputStream getOutputStream():该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据

ServerSocket类

功能:工作在服务器。专门用于与客户端之间建立连接,然后互相通信。

核心方法:

  1. 创建一个监听端口的服务器套接字:ServerSocket(int port);
  2. 等待连接,直道有客户端连接为止,连城成功后返回一个Socket对象:accept();
  3. 关闭连接:void close();

实例-TCP服务端

ServerSocket的使用 步骤

       1. 建立tcp服务端 的服务:启用插座(ServerSocket)

       2. 接受客户端的连接产生一个Socket:建立接受从插座来的数据接口Socket;

       3. 获取对应的流对象读取或者写出数据:以字节流方式读取数据;

       4. 关闭资源:关闭插座 

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.io.InputStream;
import java.io.OutputStream;

public class TcpServer {
	public static void main(String[] args) {
		tcp_server();
	}

	public static void tcp_server() {
		ServerSocket ss = null;
		Socket so = null;
		
		InputStream inputStream = null; //从客户端接收
		OutputStream outputStream = null; //从服务器发送

		//创建连接
		try {
			System.out.println("服务器启动成功!");
			ss = new ServerSocket(9595); //建立Tcp的服务端,并且监听一个端口
			so = ss.accept();
		} catch(IOException e) {
			e.printStackTrace();
		}
		
		while(true) {
			System.out.println("作为服务器,你要发送(1),还是接收(2),或者是关闭(3)?");
			Scanner sc = new Scanner(System.in);
			int x = sc.nextInt();
			if(x==1) {
				sendToClient(so,outputStream);
			} else if(x==2) {
				recevice(so,inputStream);
			} else {
				try {
					ss.close();
					break;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void recevice(Socket so, InputStream inputStream) {
		/*** 接收客户端 ***/
		byte[] buf = new byte[1024];
		int length = 0;
		try {
			inputStream = so.getInputStream();
			length = inputStream.read(buf);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("服务端接收到的数据:" + new String(buf,0,length));
	}
	public static void sendToClient(Socket so, OutputStream outputStream) {
		/*** 发送:向客户端 ***/
		String data = "客户端你好!我是服务器";
		try {
			outputStream = so.getOutputStream();
			outputStream.write(data.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("数据从服务器发送到客户端成功!");
	}
}

 实例-TCP客户端

TCP的客户端使用步骤:

       1. 建立TCP的客户端服务:启用插座;

       2. 获取到对应的流对象:建立输出通道,即输出到服务端;

       3. 写出或读取数据:输出;

       4. 关闭资源:关闭插座;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class TcpClient {
	public static void main(String[] args) {
		tcp_client();
	}

	public static void tcp_client() {
		Socket so = null;
		String ip = "127.0.0.1";
		int port = 9595;
		
		InputStream inputStream = null;
		OutputStream outputStream = null;
		
		try {
			so = new Socket(ip,port);
		} catch (IOException e) {
			e.printStackTrace();
		}

		while(true) {
			System.out.println("作为客户端,你要发送(1),还是接收(2),或者是关闭(3)?");
			Scanner sc = new Scanner(System.in);
			int x = sc.nextInt();
			if(x==1) {
				sendToServer(so,outputStream);
			} else if (x==2){
				recevice(so,inputStream);
			} else {
				try {
					so.close();
					break;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	public static void recevice(Socket so, InputStream inputStream) {
		/** 从服务器接收 **/
		byte[] buf = new byte[1024];
		int length = 0;
		try {
			inputStream = so.getInputStream();
			length = inputStream.read(buf);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("客户端接收到的数据:" + new String(buf,0,length));
	}
	public static void sendToServer(Socket so, OutputStream outputStream) {
		/** 向服务器发送 **/
		String data = "服务器你好!我是客户端";
		try {
			outputStream = so.getOutputStream();
			outputStream.write(data.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("数据从客户端发送到服务器成功!");
	}
}

实现结果:


TCP-文件上传

实现展示:

客户端

  1. Socket套接字连接服务器
  2. 通过Socket获取字节输出流,写图片
  3. 使用自己的流对象,读取图片数据源:FileInputStream
  4. 读取图片,使用字节输出流,将图片写到服务器
  5. 采用字节数组进行缓冲
  6. 通过Socket套接字获取字节输入流
  7. 读取服务器发回来的上传成功
  8. 关闭资源

 

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TcpPictureUploadClient {
	public static void main(String[] args) throws IOException{
		Socket socket = new Socket("127.0.0.1", 8000);
		//获取字节输出流,图片写到服务器
		OutputStream out = socket.getOutputStream();
		//创建字节输入流,读取本机上的数据源图片
		FileInputStream fis = new FileInputStream("c:\\users\\kyle\\desktop\\a.jpg");
		//开始读写字节数组
		int len = 0 ;
		byte[] bytes = new byte[1024];
		while((len = fis.read(bytes))!=-1){
			out.write(bytes, 0, len);
		}
		//给服务器写终止序列
		socket.shutdownOutput();
		
		//获取字节输入流,读取服务器的上传成功
		InputStream in = socket.getInputStream();

		len = in.read(bytes);
		System.out.println(new String(bytes,0,len));
		
		fis.close();
		socket.close();
	}
}

服务器

  1. ServerSocket套接字对象,监听端口8000
  2. 方法accept()获取客户端的连接对象
  3. 客户端连接对象获取字节输入流,读取客户端发送图片
  4. 创建File对象,绑定上传文件夹,判断文件夹存在, 不存,在创建文件夹
  5. 创建字节输出流,数据目的File对象所在文件夹
  6. 字节流读取图片,字节流将图片写入到目的文件夹中
  7. 将上传成功会写客户端
  8. 关闭资源
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpPictureUploadServer {
	public static void main(String[] args) throws IOException{
		ServerSocket server = new ServerSocket(8000);
		Socket socket = server.accept();
		//通过客户端连接对象,获取字节输入流,读取客户端图片
		InputStream in = socket.getInputStream();
		//将目的文件夹封装到File对象
		File upload = new File("c:\\users\\kyle\\desktop\\up");
		if(!upload.exists()) {
			upload.mkdirs();
		}
		
		//防止文件同名被覆盖,从新定义文件名字
		// 规则: 域名+毫秒值+6位随机数
		String filename = "itcast" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
		// 创建字节输出流,将图片写入到目的文件夹中
		FileOutputStream fos = new FileOutputStream(upload + File.separator + filename);
		
		//读写字节数组
		byte[] bytes = new byte[1024];
		int len = 0;
		while ((len = in.read(bytes)) != -1) {
			fos.write(bytes, 0, len);
		}
		// 通过客户端连接对象获取字节输出流
		// 上传成功写回客户端
		socket.getOutputStream().write("上传成功".getBytes());

		fos.close();
		socket.close();
		server.close();
	}
}

 

热红外图像小目标检测算法综述 热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法 阅读详情

相关推荐

混合整数规划(MIP)在资源优化中的实战应用

本文深入探讨了混合整数规划(MIP)在资源优化中的实战应用,从菜市场采购到工厂调度,再到物流配送和钢铁厂切割问题。通过分支定界法和割平面法等技术,MIP能够有效解决包含整数和连续变量的复杂优化问题,提升企业运营效率。文章还介绍了现代求解器的优化策略和实际项目中的避坑指南,帮助读者更好地应用MIP技术。

weixin_30500105的博客 91

Socket类的getInputStream方法与getOutputStream方法的使用

Socket类的getInputStream方法与getOutputStream方法的使用 客户端上的使用 getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到输入流其实就是从服务器端发回的数据。 getOutputStream方法得到的是一个输出流,客户端的Socket对象上的getOutputStream方法得到的输出流其实...

anthony_ju的博客 3万+

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

Socket的getInputStream()方法

Socket的getInputStream()方法可以获得网络连接输入,同时返回一个InputStream实例。

斜阳雨陌 1万+

【中英双语】Illumina测序原理详解 | 边合成边测序/Sequencing by Synthesis

很多朋友们问我视频讲解时用的笔记可不可以分享,那当然必须是可以呐!但我当时其实没有好好记录,只是打了个草稿就开讲啦!既然大家有需求,俺就重新整理了一下,希望可以帮到大家!

weixin_43843918的博客 7870

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 410

【JAVA课设】-- Socket实现实时通信

最近学期末了,Java要求做一个课程设计,需要用Java网络编程、JDBC、SWT进行设计。研究了 很久之后终于在各路大佬的指引下成功完工。根据在计网学习的知识,通信大致分为两种,用Socket,ServerSocket类实现的TCP服务,和用DatagramSocket类实现的UDP通信服务。详细代码使用可以参考这位大佬的文章。Java 网络编程_ZaynFox的博客-优快云博客_java网络编程首先来说一下如何使用Socket,ServerSocket类实现的TCP服务。...

qq_60293814的博客 4197

告别手动标注!PDMS NakiToolkit插件安装与初体验:以Pipeline工具为例

本文详细介绍了PDMS NakiToolkit插件的安装与使用,特别是其Pipeline工具如何通过自动化标注和材料统计功能大幅提升三维工厂设计效率。从环境准备到实战演示,帮助工程师告别繁琐的手动标注工作,实现项目交付周期的大幅缩短。

weixin_30047059的博客 350

socket.getInputStream()或 read方法是抽象方法。

1 回到 InputStream in = socket.getInputStream(); 这行代码 所以实际上是调用了 SocketImpl 中的 getInputStraeam()方法

weixin_44531193的博客 1123

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 669

在Simulink中构建感应电机的时滞补偿控制模型,并通过仿真验证不同补偿策略的有效性

核心优势Smith预估器可有效补偿已知时滞,提升系统稳定性。动态PID调整适用于时变时滞的初步补偿。扩展方向自适应时滞估计:结合Luenberger观测器实时估计时滞。鲁棒控制:引入H∞控制或滑模控制抑制参数不确定性。网络化时滞补偿:结合知识库[2]的网络延迟模型,实现端到端补偿。

amy_mhd的博客 189

Java网络编程快速入门【狂神篇】

1、网络编程的目的 无线电台。。。。传播交流信息、数据交换、通信 想要达到这个效果需要什么: 如何准确的定位网络上的一台主机 ip地址 端口,定位到这个计算机上的某个资源 找到了这个主机,如何传输数据 Javaweb: 网页编程 B/s 网络编程:TCP/IP C/S 2、网络通信的要素 如何实现网络的通信? 通信双方地址: IP 端口号 192.168.16.124::5900 规则:网络通信的协议 TCP/IP 小结: 网络编程中有两个主要的问题 如何准确的定位到网络上的一台或多

土味儿 1741

思远耳机充电芯片-SY5501

BES2700ZP-本文档介绍了思远耳机充电芯片SY5501的使用方法,包括芯片引脚功能说明(VCC、IRQ、RST等)、通信机制(VIN引脚的双重作用)以及相关注意事项。提供了代码片段、调试日志和电路图作为参考,并列出了待解决的问题清单。该芯片需要配合特定充电仓使用,支持私有协议和用户自定义通信功能。

云淡风轻 123

Java网络编程:概述--快速入门

网络编程是指通过计算机网络实现程序之间的通信。在Java中,网络编程通常涉及到数据的传输、通信协议的使用以及与网络相关的各种操作。

qq_35763697的博客 2032

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java网络编程快速入门

1.1、概述 想要达到网络通讯效果需要什么: 如何准确定位网上的一台主机,192.168.16.124: 端口,定位到这个计算机的某个资源 找到了这个主机,如何传播数据 JavaWeb与网络编程的区别 JavaWeb:网页编程 B/C. (Brower/Server) 网络编程:TCP/IP 使用 C/S 架构 (Client/Server) 1.2、 网络通讯的要素 如何实现网络通讯? 通讯双方的地址: IP 端口号 规则:网络通讯的协议 TCP/IP参考模型 小结: 网络编程中有两个主要的问

weixin_45616433的博客 232

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java_10 快速入门 Java网络编程

目录第一章:Java网络编程1.2 开发第一个网络程序范例1-1:定义服务器端——主要使用ServerSocket。范例1-2:编写客户端——Socket。1.3 网络开发的经典模型——Echo程序范例1-3:实现服务器端。范例1-4:定义客户端。范例1-5:修改服务器端。package com.yootk.demo;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class He

m0_60786924的博客 196

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java NIO 非阻塞网络编程快速入门

NIO 非阻塞网络编程快速入门 案例: 编写一个 NIO 入门案例,实现服务器端和客户端之间的数据简单通讯(非阻塞) 目的:理解 NIO 非阻塞网络编程机制 import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketCha

Java硬件工程师的博客 241

快速入门java网络编程基础------Nio

NIO(New I/O)是Java中提供的一种基于通道和缓冲区的I/O(Input/Output)模型。它是相对于传统的IO(InputStream和OutputStream)模型而言的新型I/O模型。NIO的主要特点包括:1.通道与缓冲区:2.NIO引入了通道(Channel)和缓冲区(Buffer)的概念。通道是对传统IO中的流的抽象,它可以支持双向数据传输。而缓冲区则是存储数据的地方,数据在通道和缓冲区之间传递。3.非阻塞IO:4.NIO提供了非阻塞I/O操作的能力。

qq_55272229的博客 2121

一篇短文快速入门Java中的URL(网络编程)

URL是初次接触Java网络编程的小白难以绕过的坎,而且它相当抽象。本文试着以最简单的方式向入门小白介绍Java中的URL对象使用。 目录:1.URL是什么 2

hanmo22357的博客 2498

Java网络编程快速入门【狂神篇】(1)

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!/**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

2401_84009679的博客 914

JAVA网络编程基础-1-快速网络编程入门-聊天服务器实现

java的网络编程部分是如此有魅力,以至于一旦开始使用Java网络API,只要你能想到它就能够做得到. java网络编程可以实现功能完整的网络客户端和服务器,无论是希望编写特殊用途的Web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件客户端,都会找到可供学习和借用的代码。

460

java+jna+快速入门,java成神之——网络编程基本操作

网络编程获取ipInetAddress id = InetAddress.getLocalHost(); // InetAddress id = InetAddress.getByName("www.baidu.com");System.out.println(id); // DE...

weixin_27024175的博客 179

JAVA网络编程TCP的快速入门

TCP编程SERVER端和CLIENT端分别的步骤: 服务器端SERVER 创建一个ServerSocket对象,并在指定端口进行监听 服务器端等待连接,使用accpt()方法获取一个连接,返回一个Socket对象 通过socket对象获取一个getInputSream输入流或getOutputSream输出流 关闭流需要关闭服务器和socket的,后开的先关 客户端Client 创建一个Socket对象,传入一个InetAddress对象和端口号 通过socket对象获取一个getInputSrea

weixin_47267628的博客 655

Java 网络编程、反射合集 图解笔记整理/0基础快速入门(七)

本次整理的是网络编程和反射的内容,希望能帮各位快速学习其中的细节和知识!

i_Water_boy的博客 993
上一篇: 【MySQL】简单明了:单表查询
下一篇: 【C功能体】三种流程控制结构
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值