Socket和TCP网络通信编程
Socket
介绍
(1)套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准。
(2)通信的两端都要有Socket,是两台机器间通信的端点。
(3)网络通信其实就是Socket间的通信。
(4)Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输
(5)一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端。
TCP网络通信编程
介绍
(1)基于客户端——服务端的网络通信
(2)底层使用的是TCP/IP协议
(3)应用场景举例:客户端发送数据,服务端接收并显示在控制台
(4)基于Socket的TCP编程
应用案例 1(使用字节流)
(1)编写一个服务器端,和一个客户端
(2)服务器端在9999端口监听
(3)客户端连接到服务器端,发送“hello,server”,然后退出
(4)服务器端接收到客户端发送的信息,输出,并退出
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTCP01Server {
public static void main(String[] args) throws IOException {
//1. 在本机 的 9999 端口监听, 等待连接
// 细节: 要求在本机没有其它服务在监听 9999
// 细节:这个 ServerSocket 可以通过 accept() 返回多个 Socket[多个客户端连接服务器的并发]
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端,在 9999 端口监听,等待连接..");
//2. 当没有客户端连接 9999 端口时,程序会 阻塞, 等待连接
// 如果有客户端连接,则会返回 Socket 对象,程序继续
Socket socket = serverSocket.accept();
System.out.println("服务端 socket =" + socket.getClass());
//3. 通过 socket.getInputStream() 读取客户端写入到数据通道的数据, 显示
InputStream inputStream = socket.getInputStream();
//4. IO 读取
byte[] buf = new byte[1024];
int readLen = 0;
while ((readLen = inputStream.read(buf)) != -1) {
System.out.println(new String(buf, 0, readLen));//根据读取到的实际长度,显示内容. }
//5.关闭流和 socket
inputStream.close();
socket.close();
serverSocket.close();//关闭
}
}
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketTCP01Client {
public static void main(String[] args) throws IOException {
//1. 连接服务端 (ip , 端口)
//解读: 连接本机的 9999 端口, 如果连接成功,返回 Socket 对象
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端 socket 返回=" + socket.getClass());
//2. 连接上后,生成 Socket, 通过 socket.getOutputStream()
// 得到 和 socket 对象关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
//3. 通过输出流,写入数据到 数据通道
outputStream.write("hello, server".getBytes());
//4. 关闭流对象和 socket, 必须关闭
outputStream.close();
socket.close();
System.out.println("客户端退出.....");
}
}
netstat指令
(1)netstat-an可以查看当前主机网络情况,包括端口监听情况和网络连接情况
(2)netstat-an | more可以分页显示
(3)要求在dos控制台下执行win+f
说明:
1)Listening表示某个端口在监听
2)如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息
3)可以输入ctrl+c退出指令
UDP网络通信编程
介绍
(1)类DatagramSocket和DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序。
(2)UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
(3)DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
(4)UDP协议中每个数据报都给出了完整的地址信息,因此无需建立发送方和接收方的连接。
基本流程
(1)核心的两个类/对象DatagramSocket和DatagramPacket
(2)建立发送端,接收端(没有服务端和客户端概念)
(3)发送数据前,建立数据包/报 DatagramPacket对象
(4)调用DatagramSocket的发送、接收方法
(5)关闭DatagramSocket
- 点赞
- 收藏
- 关注作者
评论(0)