In-depth understanding of the analysis of Java Socket communication
This article mainly introduces an in-depth understanding of Java Socket. Network communication in Java is implemented through Socket. Socket is divided into two categories: ServerSocket and Socket. Those who are interested can learn more
Brief description
Sockets in Java are divided into two types: ordinary Socket and NioSocket. Here is an introduction to Socket.
We can compare Socket to a means of transportation between two cities. With it, you can shuttle back and forth between the two cities. There are many types of means of transportation, and each means of transportation also has corresponding traffic rules. The same goes for Sockets, there are many types. In most cases, TCP/IP stream sockets are used, which is a stable communication protocol. (Comparison of TCP/IP and UDP)
Network communication in Java is implemented through Socket. Socket is divided into two categories: ServerSocket and Socket. ServerSocket is used on the server side to listen to requests through the accept method. The Socket is returned after the request. The Socket is used to specifically complete data transmission. The client directly uses the Socket to initiate a request and transmit data.
The use of ServerSocket can be divided into three steps:
1. Create ServerSocket. There are a total of 5 construction methods of ServerSocket. ServerSocket (int port) is usually used, and only the port number (port) is required.
2. Call the accept method of the created ServerSocket to listen. The accept method is a blocking method, which means that after calling the accept method, the program will stop and wait for the connection request, and the program will not continue until the request is received. When receiving the request, the accept method will return a Socket.
3. Use the Socket returned by the accept method to communicate with the client.
Chestnut
Client:
package IO; import java.io.*; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Client { public static void main(String[] args) { String msg = "Client Data"; try { Socket socket = new Socket("127.0.0.1", 9090); // 先写、再读 PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); // 发送数据 printWriter.println(msg); printWriter.flush(); // 获得服务端返回的数据 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from server: " + line + "\ttime=" + new Date().getTime()); // 关闭资源 printWriter.close(); bufferedReader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
Server:
package IO; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Server { private static Socket socket = null; private static ServerSocket serverSocket = null; public static void main(String[] args) throws IOException { BufferedReader bufferedReader = null; PrintWriter printWriter = null; try { // 创建一个ServerSocket监听9090端口 serverSocket = new ServerSocket(9090); while (true) { System.out.println("开始等待请求。。。。"); // 等待请求 // 监听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 socket = serverSocket.accept(); System.out.println("接收到请求:" + socket.toString() + "\ttime=" + new Date().getTime()); // 接收到请求后使用socket进行通信, 创建BufferedReader用于读取数据 bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from client: " + line + "\ttime=" + new Date().getTime()); // 创建PrintWriter, 用于发送数据 printWriter = new PrintWriter(socket.getOutputStream()); printWriter.println("received data: " + line + "\ttime=" + new Date().getTime()); printWriter.flush(); } } finally { // 关闭所有资源 bufferedReader.close(); printWriter.close(); socket.close(); serverSocket.close(); } } }
Details
Listening requests:
When a new Socket When a request comes, a new socket data structure will be created for this connection. The socket data information contains the address and port of the formal request source address and port. This newly created data structure will be associated with a list of outstanding connection data structures of the ServerSocket instance. Note that the corresponding Socket instance of the server has not been created at this time. The Socket instance of the server will not return until the three-way handshake with the client is completed, and the data structure corresponding to the Socket instance will not be completed. Moves in the list are done in the list.
Data transmission:
When the connection has been successfully established, both the server and the client will have a Socket instance. Each Socket instance has an InputStream and OutputStream. And exchange data through these two objects.
You must know that network I/O is transmitted as a byte stream. When creating a Socket object, the operating system will allocate a certain size buffer area for InputStream and OutputStream respectively. Data writing and reading are completed through this cache area.
The writing end writes data to the SendQ queue corresponding to the OutputStream. When the queue is full, the data will be transferred to the RecvQ queue of the InputStream on the other end. If RecvQ is full at this time, Then the write method of OutputStream will block until the RecvQ queue has enough space to accommodate the data sent by SendQ. The process is as shown in the figure below:
The above is the content of the in-depth understanding of the analysis of Java Socket communication. For more related content, please pay attention to the PHP Chinese website (www.php. cn)!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
