• 简单的TCP编程


    模拟用户从客户端登入,服务器接收用户的登入的信息验证;

    LoginServer.java服务端类:

    说明:这次服务只是用一次,使用一次后就会关闭。实际上服务是一直开着的。

    package tcp;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 登录的服务器
     * @author superdrew 
     *     TCP 登录 
     *    功能:用户在客户端输入用户名和密码提交给服务器,服务器接收并处理,处理完后给客户端一个返回信息
     *        客户端接口服务器的反馈消息并输出
     *    问题分解1.先做一个单向通道,用户输入用户名和密码,服务器接收并输出
     *          2.双向通道,服务器进行处理,处理完反馈一个信息给客户端,客户端接收并输出
     *
     *        注意: 关闭IO流的同时  会关闭sockect 
     *        总结:
     *            1.服务器创建ServerSocket,在指定端口监听并并处理请求
     *            2.ServerSocket通过accept() 接收用户请求并返回对应的Socket,否则一种处于监听等待状态,线程也被阻塞
     *            3.客户端创建Socket,需要指定服务器的ip和端口号,向服务器发送和接收响应
                4.客户端发送数据需要输出流(写),客户端获取反馈数据需要输入流(读)
                     服务端反馈数据需要输出流(写),服务端获取请求数据需要输入流(读)
                5.socket.getOutputStream() 
                  socket.getInputStream()
                  可以获取网络通信对方的字节流
                6.一旦使用ServerSocket和Socket建立了网络连接后,网络通信和普通IO流操作并没有太大区别
                  7.网络通信输出流建议使用DataOutputStream和ObjectOutputStream与平台无关
                      输入流相应使用DataIntputStream和ObjectInputStream
                8.如果是字符串通信也可以使用BufferedReader和PrintWriter,简单方便
                9.关闭由socket产生的流,那么socket本身会关闭
     *        
     */
    public class LoginServer {
        public static void main(String[] args) throws IOException {
            //1.创建一个serversocket  创建服务
            ServerSocket serverSocket = new ServerSocket(8888);//端口 8888  IP地址是本机
    
            //2.使用 serversocket 监听  socket 套接字
            Socket socket = serverSocket.accept();
            
            //3.接收用户请求,并处理
            //InputStream is = new FileInputStream("C:/b.txt");从文件读取  
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            String result = dis.readUTF();
            System.out.println("客户端发送来的消息request:"+result);
            
            //4.给客户端反馈一个消息 
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            dos.writeUTF("welcome!");
            
            //5.关闭资源
            System.out.println(socket.isClosed());        //false
            dos.close();
            dis.close();
            System.out.println(socket.isClosed());        //true
            socket.close();
            serverSocket.close();
            System.out.println(socket.isClosed());        //true
        }
    }

    LoginClient.java客户端类:

    package tcp;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /**
     * 登录的客户端
     * @author superdrew
     *
     */
    public class LoginClient {
        public static void main(String[] args) throws UnknownHostException, IOException {
            //1.创建一个socket  连接服务器
            Socket socket = new Socket(InetAddress.getLocalHost(), 8888);//必须要知道服务器IP和端口号
            
            //2.通过 socket 发送数据给服务器
            //OutputStream os = new FileOutputStream("C:/b.txt");输出到文件
            String info = "username=superdrew&password=superdrew";
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            dos.writeUTF(info);
            
            //3.接收服务器返回的消息
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            String result = dis.readUTF();
            System.out.println("服务器返回的消息response:"+result);
            
            //4.关闭资源
            dis.close();
            dos.close();
            socket.close();
        }
    }

    结果展示:

  • 相关阅读:
    静态与非静态(转改)
    关于odp.net的FetchSize属性
    SQL_SERVER 导oracle(转)
    win7电脑上wifi
    Oracle对象统计信息
    SQL_SERVER 连接oracle(转)
    linq in 语法
    关于引擎的设计
    温习设计模式
    技巧类
  • 原文地址:https://www.cnblogs.com/superdrew/p/8098488.html
Copyright © 2020-2023  润新知