java socket学习笔记(一)——单线程实现socket通信

服务器端

public class serverDemo {
    public static void main(String[] args) {
        /*
         * 服务器端测试
         *  public ServerSocket(int port) throws IOException {
                this(port, 50, null);//默认允许接入50个客户端  绑定本地的端口  即127.0.0.1
            }
         * */
            //创建一个服务器端的Socket
            ServerSocket serversocket=null;
            Socket socket =null;

            InputStream is=null;
            InputStreamReader isr=null;
            BufferedReader br=null;

            OutputStream os=null;
            PrintStream ps=null;
            try {
                serversocket = new ServerSocket(9999);//端口号范围 0-65535 建议使用尽量大的端口号
                System.out.println("服务即将启动");
                //等待客户端的连接  accept()方法是阻塞式的方法 只有客户端连接进来的时候才会执行
                socket = serversocket.accept();//alt+shift+l快捷键自动接收 
                System.out.println("连接成功");

                //与客户端建立通信,获取输入流,获取客户端提供的信息
                is=socket.getInputStream();
                isr=new InputStreamReader(is);
                br=new BufferedReader(isr);

                //获取输出流,响应客户端的请求
                os=socket.getOutputStream();
                ps=new PrintStream(os);
                String data=null;
                while((data=br.readLine())!=null){
                //循环获取客户端的信息
                    System.out.println("我是服务器,客户端提交的信息为:"+data);
                    /*
                     * 经过多次尝试 只有使用打印流,也就是PrintStream将数据写入socket流中  客户端才能够收到,这儿很是不理解,希望有大神可以指教
                     * */
                    ps.println("已收到");
                    ps.flush();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   

    }
}

客户端:

public class ClientDemo01 {
    public static void main(String[] args) {
        /*
         * 创建客户端的socket
         *  public Socket(String host, int port)
         *  host指服务器的IP地址 port指所要连接的端口号
         * */   
        try {
            String ip="10.13.34.39";
            int port=9999;
            Socket socket=new Socket(ip,port);
            if(socket!=null)
            System.out.println("客户端连接成功");

            //获得socket的输出流
            OutputStream os = socket.getOutputStream();
            PrintStream ps=new PrintStream(os);

            //获得socket的输入流  获得服务器端的响应
            InputStream is=socket.getInputStream();
            InputStreamReader isrs=new InputStreamReader(is);
            BufferedReader brs=new BufferedReader(isrs);

            //获取命令行输入流 并将其转换为字符流
            InputStreamReader isr=new  InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            String line=null;
            String server_message = null;
            while((line=br.readLine())!=null) {
                /*System.setOut(ps);//将命令行输入的内容输出内容更改到socket输出流中
                System.out.println(line);
                与下面的方法等效
                */
                ps.println(line);
                ps.flush();
                String sm=brs.readLine();
                 System.out.println(sm);
                /*
                 * String sm=brs.readLine();
                 * System.out.println(sm);
                 * 想每次发送过去再打印出服务器返回的信息,但是没有成功,不知道什么原因,希望有大神可以指教
                 */
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值