Socket TCP传输数据

来源:互联网 发布:cf2016年刷枪软件 编辑:程序博客网 时间:2024/05/19 03:45
/* * 客户端 */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("用户名:alice;密码:789");            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 (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}
/* * 基于TCP协议的Socket通信,实现用户登陆 * 服务器端 */public class Server {    public static void main(String[] args) {        try {            //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口            ServerSocket serverSocket=new ServerSocket(8888);            Socket socket=null;            //记录客户端的数量            int count=0;            System.out.println("***服务器即将启动,等待客户端的连接***");            //循环监听等待客户端的连接            while(true){                //调用accept()方法开始监听,等待客户端的连接                socket=serverSocket.accept();                //创建一个新的线程                ServerThread serverThread=new ServerThread(socket);                //启动线程                serverThread.start();                count++;//统计客户端的数量                System.out.println("客户端的数量:"+count);                InetAddress address=socket.getInetAddress();                System.out.println("当前客户端的IP:"+address.getHostAddress());            }        } catch (IOException e) {            e.printStackTrace();        }    }}
/* * 服务器线程处理类 */public class ServerThread extends Thread {    // 和本线程相关的Socket    Socket socket = null;    public ServerThread(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();//调用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();            }        }    }}
1 0