一)Socket通信
1)TCP协议是面向连接、可靠、有序的、以字节流的方式发送数据
2)基于TCP协议实现网络通信的类
1、客户端的Socket类
2、服务端的ServerSocket类
3)Socket通信实现步骤
1、创建ServerSocket和Socket
2、打开连接到Socket的输入、输出流
3、按照协议对Socket进行读写操作
4、关闭输入输出流、关闭Socket
4)
ServerSocket
public ServerSocket(int port) throws IOException
-
创建绑定到特定端口的服务器套接字。端口
0
在所有空闲端口上创建套接字。 -
-
-
public Socket accept() throws IOException
- 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
-
-
public void close() throws IOException
-
关闭此套接字。 在
accept()
中所有当前阻塞的线程都将会抛出SocketException
。
-
关闭此套接字。 在
-
-
Socket
public Socket(InetAddress address, int port) throws IOException
- 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
-
public InputStream getInputStream() throws IOException
- 返回此套接字的输入流。
-
-
public OutputStream getOutputStream() throws IOException
-
返回此套接字的输出流。
如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出
IllegalBlockingModeException
。
-
返回此套接字的输出流。
-
-
public void shutdownInput() throws IOException
-
此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认然后被静默丢弃。
如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。
-
此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认然后被静默丢弃。
-
public void shutdownOutput() throws IOException
- 禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。
-
- 5)服务端
- 1、创建ServerSocket对象,绑定监听端口
- 2、通过accept()方法监听客户端请求
- 3、连接建立后,通过输入流读取客户端发送的请求信息
- 4、通过输出流向客户端发送响应信息
- 5、关闭相关资源
- 客户端
- 1、创建Socket对象,指明需要连接的服务器的地址和端口号
- 2、连接建立后,通过输出流向服务器端发送请求信息
- 3、通过输入流获取服务器响应的信息
- 4、关闭相关资源
-
-
-
-
-
- 服务端:
-
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = null; System.out.println("***服务器即将启动,等待客户端的连接***"); //2、调用accept()方法开始监听,等待客户端的连接 socket = serverSocket.accept(); //3、获取输入流,并读取客户信息 InputStream is = socket.getInputStream();//字节流信息 InputStreamReader isr = new InputStreamReader(is);//将字节流包装为字符流 BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲 String info = null; while ((info=br.readLine()) != null) {//循环读取客户端信息 System.out.println("我是服务器,客户端说: " + info); } socket.shutdownInput();//关闭输入流 //4、关闭资源 br.close(); isr.close(); is.close(); socket.close(); serverSocket.close();
-
-
-
- 客户端:
-
-
//1.创建客户端Socket,指定服务器地址和端口 Socket socket = new Socket("localhost",8888); //2.获取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流 pw.write("用户名:xiaoli;密码:789"); pw.flush(); socket.shutdownOutput(); //4.关闭资源 pw.close(); os.close(); socket.close();