通过Socket实现TCP编程,用户登录之服务器相应客户端,客户端和服务端之间的通信

服务器端:

  1.创建ServerSocket对象,绑定监听端口;

  2.通过accept()方法监听客户端请求;

  3.建立连接后通过输入流读取客户端发送的请求信息;

  4.通过输出流向客户端发送响应信息;

package com.wxd.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 基于TCP协议的Socket通信,实现用户登录,服务端
 */
public class Server {
    public static void main(String[] args) {
        try {
            //服务端
            //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket =new ServerSocket(10086);//1024-65535的某个端口
            //2、调用accept()方法开始监听,等待客户端的连接
            Socket 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、获取输出流,响应客户端的请求
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("欢迎您!");
            pw.flush();
            //5、关闭资源
            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

控制台输出:

    我是服务器,客户端说:用户名:admin;密码:123

 

客户端:

  1.创建socket对象,指明需要连接的服务器地址和端口号;

  2.建立连接后,通过输出流向服务器端发送请求信息;

  3.通过输入流获取服务器的响应信息;

  4.关闭相关资源;

package com.wxd.socket;

import java.io.*;
import java.net.Socket;

/**
 * 基于TCP协议的Socket通信,实现客户端
 */
public class Client {
    public static void main(String[] args) {
        try {
            //客户端
            //1、创建客户端Socket,指定服务器地址和端口
            Socket socket =new Socket("localhost",10086);
            //2、获取输出流,向服务器端发送信息
            OutputStream os = socket.getOutputStream();//字节输出流
            PrintWriter pw =new PrintWriter(os);//将输出流包装成打印流
            pw.write("用户名:admin;密码:123");
            pw.flush();
            socket.shutdownOutput();
            //3、获取输入流,并读取服务器端的响应信息
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while((info=br.readLine())!=null){
                System.out.println("我是客户端,服务器说:"+info);
            }
            //4、关闭资源
            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

 

控制台输出:  

我是客户端,服务器说:欢迎您!

Process finished with exit code 0

posted @ 2018-10-09 21:49  MrDong先生  阅读(3054)  评论(0编辑  收藏  举报