Network Transport Protocol
InetAddress class
The Socket class understands:
Socket common methods
TCP-based socket programming
UDP-based socket programming
URL programming
Summarize
Java Network programming
Java is inherently a language that supports the Web. Java provides a network class library, can easily achieve network connectivity, and the underlying details of the internet is hidden in the Java local installation system, controlled by the JVM, Java implemented a cross-platform network library, so programmers face a unified network programming environment.
Two problems with network programming:
1 How to accurately locate one or more hosts on the network
2 How to reliably and efficiently transfer data.
IP address and port number
IP Address: Uniquely identifies a computer on the Internet
Two representations of IP: Hostaddress host address (commonly known as IP)
HostName hostname (commonly known as domain name) domain name requires DNS domain name server to resolve to the IP address, scope.
Note Local loopback address: 127.0.0.1 Local host name: localhost
"Understand" when the browser issued a domain name request, first find the local hosts, directories as follows C:\Windows\System32\drivers\etc\hosts, to see if there is an input domain name address, no, then through the DNS server, resolve the domain name, access to the host.
Port number: Identifies the program that is running on the computer.
1, different programs have different port numbers;
2, the port number is specified as a 16-bit integer, 0~65535. where 0~1023 "Well-known-ports" is used by pre-defined service communications (Mysql occupies 80, etc.) unless we need to access these specific services, we should use 1024~65535 "Dynamic Ports "One of these ports communicates to avoid port collisions.
A network socket is derived from the combination of the port number and IP address.
mysql:3306 tomcat:8080; Ftp:21
HTTP:80 oral:1521; Telnet:23 ssh:22
The InetAddress class in Java
Getbyname (String host)
- 3.getHostName (): Gets the domain name corresponding to the IP address
Gethostaddress (): Get IP Address
The InetAddress class does not provide a constructor for the external, usually with the following two methods to obtain an instance of the InetAddress class.
Getbyname (String host) determines the IP address given the host name and returns an instance of the InetAddress class. The parameter can be a string form of a domain name or IP.
Getbyaddress (byte[] address) Returns an instance of the InetAddress class in the case of a given IP address.
Getlocalhost () Returns an instance of the local host's InetAddress class.
Gethostaddress () returns the string form of the host IP address.
GetHostName () returns the string form of the host domain name
isreachable (int timeout) can be accessed by the host in a timeout (milliseconds) period.
Getcanonicalhostname () returns the fully qualified name string form of the host.
Data Transfer Encapsulation Model:
Network Transport Communication Protocol
Network communication protocol is a standard to regulate the transmission rate, transmission code, code structure, Transmission control steps, error control and so on.
Layered thinking of communication protocols:
The links between the nodes are complex, and when the protocol is developed, the complex components are decomposed into several simple components, which are then combined together. And the most common way of compounding is
Hierarchical mode, that is, the same layer can communicate, the previous layer can call the next layer, and the next layer does not have a relationship between the layers of each other, conducive to the development and expansion of the system.
Based on the understanding of the above communication protocols, the two most common protocols in the Transport Layer protocol are:
1 Transmission Control Protocol TCP (transmission-Protocol)
2 Subscriber Packet Protocol UDP (user Datagram Protocol)
TCP protocol:
Before using the TCP protocol, you must first establish a TCP connection to form a transport data channel
High reliability thanks to the "three-time handshake" method prior to transmission
Two application processes for communication with the TCP protocol client & server side
Large amount of data can be transferred in the connection
Transfer completed, need to release the established link, inefficient
UDP protocol:
Encapsulates data, sources, and purposes into packets without the need to establish a connection
Limit the size of each packet within 64k
Because there is no need to connect, it is unreliable
At the end of the sending packet, there is no need to free up resources, fast.
Socket Understanding:
A socket is a combination of a set of port numbers and IP addresses.
Using sockets to develop Web applications has been widely adopted and has become a standard.
A socket is needed on both ends of the communication.
Network communication is actually the communication between sockets.
The socket allows the program to treat the network connection as a stream, and the data is transmitted via IO between two sockets.
An application that typically initiates communication is a client-side server that waits for one end of a communication request.
Socket-based TCP programming process:
Common methods for socket classes
InetAddress getLocalAddress() 返回本地Socket中的InetAddress 对象。InetAddress getInetAddress() 返回对方Socket 中的InetAddress 对象。int getLocalPort() 返回本地Socket 中的端口int getPort() 返回对方Socket 中的端口void close() throws IOException 关闭Socket,不可在以后的网络链接中使用,除非创建新的SocketInputStream getInputStream() throws IOException 获取与Socket相关联的字节输入流,用于从Socket中读数据。OutputStream getOutputStream() throws IOException 获取与Socket相关的字节输出流,用于从Socket中写入数据。
Socket-based TCP programming
1 Create socket: Constructs the socket class object based on the IP and port of the specified server. If the server-side response, establish a client-to-server communication line, if the connection fails, an exception occurs.
2 Open the input/output stream connected to the socket: using the Socket object's
The getInputStream () method obtains the input stream and uses the Getoutputstream () method to obtain the output stream.
3, read and write the socket according to a certain protocol: the input stream reads the information from the server into the line (but cannot read the information it puts into the line), and writes the information to the line through the output stream.
4. Close the socket, disconnect the client from the server, and release the line.
Part of the code that is implemented specifically:
The client program can use the socket class to create an object, and it will automatically initiate a connection to the server side.
The socket is constructed by: socket (String host,int port) throws Unknownhostexception,ioexception
To the server (the domain name is host.) Port number Port) initiates a TCP connection and, if successful, creates a socket object, or throws an exception.
Socket (inetaddress address,int Port) throws IOException: Initiates a connection based on the IP address and port number represented by the InetAddress object. The procedure for a client to establish a socket object is to make a socket connection request to the server
Socket s = new socket ("192.168.40.165", 9999);
OutputStream out = S.getoutputstream (); Out.write ("Hello". GetBytes ());
S.close ();
Server-side four basic steps:
1, Call ServerSocket (intPort): Creates a server-side socket and binds to the specified port. A request to listen for a client. The following code may have a IOException exception in this case. ServerSocket SS =NewServerSocket (9999);2, call Accept (): Listens for connection requests and, if the client requests a connection, accepts the connection and returns the communication socket object. Accepting a client's socket is also prone to ioexception exceptions. Note that the Accept () method returns a socket object, but this method does not return immediately, which blocks the execution of the current thread on the server side until the client requests a socket connection. Socket s = ss.accept (); Note: The ServerSocket object can call Setsotimeout (intTimeout) method to set the time-out value (in milliseconds) when the ServerSocket object calls the Accept () method to block when the timeout is exceeded sockettimeoutexception3, the Getoutputstream () and getInputStream () of the socket class object are called to get the output stream and the input stream to begin sending and receiving network data. InputStreaminch= S.getinputstream (); byte[] buf =Newbyte[1024x768];int Len; while((Len=inch. Read (BUF))! =-1){Stringstr =New String(BUF,0,Len); System.out.print (str)}4, close the ServerSocket and socket objects: End of client access, close the communication socket.inch. Close (); S.close (); Ss.close ();
Note:
The ServerSocket object is responsible for waiting for the client to request a socket connection, which means that the server must establish a ServerSocket object that waits for a customer request before establishing a socket connection. The so-called "receive" client's socket request is that the accept () method returns a Socket object Note:
It is important to note that reading data from a socket connection is very different from reading data from a file, although both are input streams, all data is already present in the file when the data is read from the file, and when a socket connection is used, it is possible that the data at the other end is being read before it is sent. This will block this thread until the Read method has successfully read the message, and the line friend continues with the subsequent operation.
After the connection is established, the server-side socket object can call the Getinetaddress () method to get a InetAddress object that contains the client IP. The same client can also call the Getinetaddress () method to return a InetAddress object that contains the server-side IP.
The socket object calls the close () method to close both sides of the socket connection object, which causes the IOException exception to occur whenever a party closes the connection.
UDP network communication
Class Datagramsocket and Datagrampacket implement a network program based on UDP protocol. The UDP datagram sends and receives through the datagram socket datagramsocket, the system does not guarantee that the UDP datagram can be sent to the destination safely, nor is it certain when it can arrive. The Datagrampacket object encapsulates a UDP datagram that contains the IP address and port number of the sending side and the IP address and port number of the receiving end. Each datagram in the UDP protocol gives the full address information, so there is no need to establish a connection between the sender and the receiver
UDP Transmission Flow: 1, create Datagrampacket object, Datagrampacket class to package data, create Datagrampacket object called datagram, its constructor is as follows:
Datagrampacket (byte[] data,int len,inetaddress Add, int port)
Datagrampacket (byte[],int offset,int length,inetaddress add,int Port)
The packet object contains the following characteristics: 1, which contains data 2 specified by the data array, the packet will be sent to the destination address is add, the destination port number is the port of the host, where the second constructor creates a packet object containing data from offset starting at the specified length of data.
Note: Datagrampacket object calls
The public int Getport () method gets the target port number of the datagram,
Public inetaddress Getaddres () method gets the destination address
Public byte[] GetData () method gets the data in the datagram.
2 creates a Datagramsocket object that is responsible for sending datagrams.
Call the parameterless constructor of the Datagramsocket class, as follows
Datagramsocket mailout = new Datagramsocket ();
Mailout.send (package); 3 Create the Datagramsocket object, responsible for receiving the datagram datagramsocket Mailin = new Datagramsocket (int port);
The parameter must be the same as the port number of the datagram to be received.
4 Create a datagram Datagrampacket object to receive,
Call its constructor to build the packet: Datagrampacket (byte[] data,int length); The datagram will accept data of length in byte array.
byte[] data = new data[1024];
int length = 90;
Datagrampacket inpacket = new Datagrampacket (data,length);
5, call the receive (Datagrampacket Inpacket) method of the Datagramsocket object.
Mailin.receive (Inpacket); Note: The Receive () method may block threads until a datagram Datagrampacket is received. The datagram object can call the Getport () method to get the port from which the received datagram originated from the remote host, that is, the originating port number of the packet, and, similarly, to call the Getinetaddress () method to get the originating address of the packet. The packet length should not exceed 8192KB.
Processing the received data:
String str = new String (Inpacket.getdata (), 0,inpacket.getlength ());
System.out.println (str);
6 Closing the Socket object
Note: The sending side and the receiving end are two separate running programs, thread Independent.
URL programming
The basic composition of the URL:
<传输协议>://<主机名>:<端口号>/<文件名>例如: http://192.168.1.100:8080/helloworld/index.jsp
In order to indicate that the class URL is implemented in Url,java.net. We can initialize a URL object by using the following constructor: public URL (string spec): A URL object can be constructed from a string that represents a URL address.
For example: URL URL= NewURL ("http://www. atguigu.com/"); PublicURL (url context,StringSPEC): Constructs a URL object from a base URL and a relative URL. For example: URL downloadurl= NewURL (url, "download.Html") public URL (string protocol, string host, string file); For example: New URL ("http", "Www.Atguigu.Com"," download. HTML "); PublicURL (StringProtocolStringHost, int port,Stringfile); For example: URL Gamelan= NewURL ("http","Www.atguigu.com", the, "Download.Html");
The constructor of a class URL declares that a non-runtime exception is thrown, and this exception must be handled, usually with a try-catch statement. After a URL object is generated, its properties cannot be changed, but the properties can be obtained by the method it is given:
public string Getprotocol () Gets the protocol name of the url public string gethost () gets the host name of the url public string getport () Gets the port number of the url public string GetPath () gets the
url public
string getFile () gets the
url public
string getquery () gets the
url
inputstream openstream (): ① opens a connection to this URL, returning the
inputstream . URLConnection openconnection (): Returns the Connection object with
url
If you want to output data, such as to the server-side CGI (the Public Gateway Interface Common Gateway Interface, the user browser and the server-side application to connect the interface) program to send some data, you must first establish a connection with the URL, and then read it, You need to use URLConnection at this time.
URLConnection: Represents the connection to the remote object referenced by the URL.
When you establish a connection to a URL, you first generate the corresponding URLConnection object on a URL object by means of the method OpenConnection ().
If the connection process fails, a ioexception is generated
URL netchinaren = new URL ("http://www.atguigu.com/index.shtml"); Urlconnectonn con = netchinaren.openconnection ();
The input and output streams obtained through the URLConnection object can interact with existing CGI programs.
public Object getcontent () throws ioexception Public int getcontentlength () public String getcontenttype () Public long getdate () public long getlastmodified () public inputstream getinputstream () Span class= "Hljs-keyword" >throws ioexceptionpublic outputsteram getoutputstream () throws ioexception
Summarize
Computers located on the network have unique IP addresses so that different hosts can differentiate from each other. Client-server is one of the most common network application models.
A server is a hardware or software that provides a specific service to its clients. A client is a user application that accesses a service provided by a server.
A port number is a place of access to a service that distinguishes multiple services on the same physical computer.
Sockets are used to connect the client and server, and each communication session between the client and the server uses a different socket.
The TCP protocol is used to implement a connection-oriented session. The network-related features in Java are defined in the java.net package.
Java uses the InetAddress object to represent an IP address with two fields: Host name (String) and IP address (int).
The class Socket and ServerSocket implement a client-server program based on the TCP protocol.
The socket is a connection between the client and the server, and the details of the connection creation are hidden. This connection provides a secure data transmission channel, because the TCP protocol can solve the data in the transmission process of loss, corruption, duplication, chaos, and network congestion, it guarantees the reliable transmission of data.
Class URLs and URLConnection provide the most advanced network applications. URLs of network resources have the same location to represent various network resources on the Internet. The URL object allows you to create a connection between the current application and the network resource represented by the URL, so that the current program can read the network resource data or send its own data to the network.
Fundamentals of Java Network programming