这里我们通过一个用户登录的例子来学习基于 TCP 协议的 Socket 通信。
1、ServerSocket 构造方法
2、ServerSocket 成员方法
1、Socket 构造器
2、Socket 成员方法
1、server.java
2、ServerThread.java
3、Client.java
上面的程序支持一个服务端和多个客户端对话。
1、先运行 Server 类
2、再运行 Client 类
服务端界面
客户端界面
3、再运行一次 Client 类,再启动一个客户端
服务端界面
客户端界面如上
本文参考:慕课网
本文地址:https://liuyanzhao.com/6907.html
Socket 通信模型
Socket通信步骤
ServerSocket 构造器和成员方法
1、ServerSocket 构造方法
2、ServerSocket 成员方法
Socket 构造器和成员方法
1、Socket 构造器
2、Socket 成员方法
一个服务端和支持多个客户端的对话demo
1、server.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- *
- * 基于TCP协议的Socket通信,实现用户登录
- * 服务端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Server {
- public static void main(String args[]) {
- try {
- //1、创建一个服务端Socket,即ServerSocket,指定绑定的端口,并监听此端口
- ServerSocket serverSocket = new ServerSocket(8888);
- Socket socket = null;
- //记录客户端的数量
- int count = 0;
- //2、调用accept方法开始监听,等待客户端的连接
- System.out.println("***服务端即将启动,等待客户端的连接****");
- //循环监听等待客户端的连接
- while(true) {
- //调用accept()方法开始监听,等待客户端的连接
- socket = serverSocket.accept();
- //创建一个新的线程
- ServerThread serverThread = new ServerThread(socket);
- //启动线程
- serverThread.start();
- count ++;//统计客户端的数量
- System.out.println("客户端的数量:"+count);
- InetAddress inetAddress = socket.getInetAddress();
- System.out.println("当前客户端的IP:"+inetAddress.getHostAddress());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
2、ServerThread.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 服务器线程处理类
- * @author 言曌
- * @date 2017/12/4 下午8:32
- */
- public class ServerThread extends Thread {
- //本线程相关的Socket
- Socket socket = null;
- public ServerThread(Socket socket) {
- this.socket = socket;
- }
- //线程执行操作,响应客户端的请求
- public void run() {
- InputStream inputStream = null;//字符输入流
- InputStreamReader inputStreamReader = null;
- BufferedReader bufferedReader = null;
- OutputStream outputStream = null;
- PrintWriter printWriter = null;
- try {
- //获取输入流,并读取客户端信息
- inputStream = socket.getInputStream();
- inputStreamReader = new InputStreamReader(inputStream);//将字节流转换成字符流
- bufferedReader = new BufferedReader(inputStreamReader);//为字符流添加缓存
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务器,客户端说:"+info);
- }
- socket.shutdownInput();//关闭输入流
- //获取输出流,响应客户端的请求
- outputStream = socket.getOutputStream();
- printWriter = new PrintWriter(outputStream);
- printWriter.write("欢迎您!");
- printWriter.flush();//刷新缓存
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- //关闭资源
- try {
- if(bufferedReader != null) {
- bufferedReader.close();
- }
- if(outputStream != null) {
- outputStream.close();
- }
- if(inputStreamReader != null) {
- inputStreamReader.close();
- }
- if(inputStream != null) {
- inputStream.close();
- }
- if(socket != null) {
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
3、Client.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 客户端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Client {
- public static void main(String args[]) {
- try {
- //1、创建客户端Socket,指定服务器地址和端口
- Socket socket = new Socket("localhost",8888);
- //2、获取输出流,向服务器端发送信息
- OutputStream outputStream = socket.getOutputStream();//字节输出流
- PrintWriter printWriter = new PrintWriter(outputStream);//将输出流包装为打印流
- printWriter.write("用户名:Tom;密码:123456");
- printWriter.flush();//刷新缓存,输出信息
- socket.shutdownOutput();//关闭输出流
- //3、获取输入流,并读取服务器的响应信息
- InputStream inputStream = socket.getInputStream();
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是客户端,服务器说:"+info);
- }
- //4、 关闭资源
- printWriter.close();
- bufferedReader.close();
- inputStream.close();
- outputStream.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
上面的程序支持一个服务端和多个客户端对话。
运行效果
1、先运行 Server 类
2、再运行 Client 类
服务端界面
客户端界面
3、再运行一次 Client 类,再启动一个客户端
服务端界面
客户端界面如上
本文参考:慕课网
本文地址:https://liuyanzhao.com/6907.html
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏