zoukankan      html  css  js  c++  java
  • java Socket编程-基于TCP

    package com.wzy.Test;
    
    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;
    
    /**
     * 
     * @author wzy
     *服务器线程处理类
     */
    public class ServerThread extends Thread {
        //和本线程相关的Socket
        Socket socket;
        
        public ServerThread(Socket socket){
            this.socket = socket;
        }
        public void run(){
            PrintWriter pw=null;
            OutputStream out=null;
            BufferedReader br=null ;
            InputStreamReader isr=null;
            InputStream is=null;
            try{
                is = socket.getInputStream();//字节输入流
                //将字节流转换为字符流
                isr = new InputStreamReader(is);
                //为输入流添加缓冲
                br = new BufferedReader(isr);
                String info = "";
                String info1 = null;
                while((info = br.readLine())!=null){
                    //循环读取客户端信息
                    System.out.println("服务器接收到客户端的信息为:  "+info);
                    info1 = info;
                }
                
                System.out.println(info1);
                //关闭输入流
                socket.shutdownInput();
                //4获取输出流,响应客户端的请求
                out = socket.getOutputStream();
                pw = new PrintWriter(out);
                pw.write("你好,客户端,我是服务器!");
                pw.flush();
                //5.关闭资源
                
            }
            catch(Exception e){
                e.printStackTrace();
                
            }
            finally{
                try{
                    if(pw!=null){pw.close();}
                    if(out!=null){out.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();
                }
                }
            
        }
    }
    package com.wzy.Test;
    
    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.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    /**
     * 
     * @author wzy
     *服务器
     */
    
    public class Server {
        public static void main(String[] args) {
            int count = 0;
            //for(int a = 0;a<5;a++){
            try {
                //1.创建一个服务器端socket,即ServerSocket,指定绑定的端口,并监听
                ServerSocket serverSocket = new ServerSocket(8888);//监听8888端口
                System.out.println("服务器等待客户端连接....");
                //2.调用accept开始监听,等待客户端连接
                Socket socket =null;
                while(true){
                    socket = serverSocket.accept();//接受
                    ServerThread serverThread = new ServerThread(socket);
                    serverThread.start();
                    System.out.println("客户连接数量:"+(++count));
                    InetAddress address = socket.getInetAddress();
                    System.out.println("客户端ip:"+address.getHostAddress());
                    
                }/*
                //3.获取输入流,并读取客户端信息
                InputStream is = socket.getInputStream();//字节输入流
                //将字节流转换为字符流
                InputStreamReader isr = new InputStreamReader(is);
                //为输入流添加缓冲
                BufferedReader br = new BufferedReader(isr);
                String info = "";
                String info1 = null;
                while((info = br.readLine())!=null){
                    //循环读取客户端信息
                    System.out.println("服务器接收到客户端的信息为:  "+info);
                    info1 = info;
                }
                
                System.out.println(info1);
                //关闭输入流
                socket.shutdownInput();
                //4获取输出流,响应客户端的请求
                OutputStream out = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(out);
                pw.write("你好,客户端,我是服务器!");
                pw.flush();
                //5.关闭资源
                pw.close();
                out.close();
                br.close();
                isr.close();
                is.close();
                socket.close();
                serverSocket.close();*/    
            } catch (Exception e) {
                
                e.printStackTrace();
            }
            }
    //}
    }
    package com.wzy.Test;
    
    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;
    
    /**
     * 
     * @author wzy
     *客户端
     */
    public class Client {
        public static void main(String[] args) {
            
            try {
                //1.创建客户端socket,指定服务器地址和端口
                Socket socket = new Socket("127.0.0.1", 8888);
                //2.获取输出流,向服务器发送信息
                OutputStream os = socket.getOutputStream();//字节输出流
                PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
                pw.write("hello,服务器!!!,我是客户端");
            
                pw.flush();//刷新缓存
                socket.shutdownOutput();//关闭输出流
                //3.获取输入流,读取服务器的响应
                InputStream in = socket.getInputStream();
                InputStreamReader inr = new InputStreamReader(in);
                BufferedReader brr = new BufferedReader(inr);
                String info = null;
                while((info =brr.readLine())!=null){
                    System.out.println("客户端接到服务器的消息:  "+info);
                    
                }
                brr.close();
                inr.close();
                in.close();
                
                //4.关闭资源
                pw.close();
                os.close();
                socket.close();
                
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    cookie和session的区别?
    请画出Servlet 2.2以上Web Application的基本目录结构
    简述HttpSession的作用、使用方法,可用代码说明
    Request对象的主要方法
    什么情况下调用doGet()和doPost()?
    SERVLET API中forward()与redirect()的区别?
    Servlet的基本架构
    说一说Servlet的生命周期
    解释一下什么是servlet?
    基数排序
  • 原文地址:https://www.cnblogs.com/wwzyy/p/6040841.html
Copyright © 2011-2022 走看看