Java Socket application TCP-based communication (multi-threading)

The following is the server Server.class

package com.dulu.TCP;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    /**
     *基于TCP的Socket通信,实现用户登录
     *服务器端
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         try {
             //1 创建一个服务器端的Socket 即 ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket = new ServerSocket(8888);//端口号尽量为1023之后的

            Socket socket = null;

            //定义客户端的数量
            int count = 0;

            System.out.println("***服务器即将启动,等待客户端的连接***");
             //2循环监听等待客户端的连接,调用accept()方法开始监听,等待客户端连接
            while(true){
                socket = serverSocket.accept();//处于阻塞状态,等待客户端的请求

                //创建一个新的线程
                ServletThread servletThread = new ServletThread(socket);
                //启动线程
                servletThread.start();

                count++;//统计客户端的个数
                System.out.println("客户端的数量为:" + count);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

package com.dulu.TCP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

/**
 * 客户端
 */
public static void main(String[] args) {

try {
// 1 创建客户端Socket,指定服务器和端口
Socket socket = new Socket("localhost",8888);
 //2 获取输出流,向服务端发送信息
OutputStream os = socket.getOutputStream();//字节输入流
PrintWriter pw = new PrintWriter(os);//将输出流打包为打印流
pw.write("用户名:admin;密码:123");
pw.flush();
socket.shutdownOutput();//关闭输出流

//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);

}

//关闭资源
br.close();
    is.close();
isr.close();
pw.close();
os.close();
socket.close();

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

ServletThread.class

package com.dulu.TCP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 服务器端线程处理类
 */
public class ServletThread extends Thread {

    //和本线程相关的socket
    Socket socket = null;

    public ServletThread(Socket socket){
        this.socket = socket;
    }

    //线程执行的操作,响应客户端的请求
    public void run(){

        InputStream is = null;
        InputStreamReader isr = null;

        BufferedReader br = null;

        OutputStream os = null;
        PrintWriter pw = null;
        try {
            // 获取输入流,并读取客户端信息
            is = socket.getInputStream();
            isr = new InputStreamReader(is);

            br = new BufferedReader(isr);

            //读取数据
            String info = null;
            while((info = br.readLine())!=null){
                System.out.println("我是服务器,客户端说:"+ info);

            }
            socket.shutdownInput();//关闭输入流

            // 获取输出流,响应客户端的请求
            os = socket.getOutputStream();
            pw = new PrintWriter(os);
            pw.write("欢迎你!");
            pw.flush();//输出缓冲区
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            // 关闭资源
            try {
                if(pw!=null)
                    pw.close();
                if(os!=null)
                    os.close();
                if(br!=null)
                    br.close();
                if(isr!=null)
                    isr.close();
                if(is!=null)
                    is.close();
                if(socket!=null)
                    socket.close();
            } catch (IOException e) {               
                e.printStackTrace();
            }
        }

    }

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324585636&siteId=291194637