zoukankan      html  css  js  c++  java
  • Sokect简单入门(1)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.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务器端
     * */
    public class LoginServer {
        public static void main(String[] args) {
            try {
                //1.建立一个服务器Socket(ServerSocket)绑定指定端口并开始监听
                ServerSocket serverSocket=new ServerSocket(8800);
                //2.使用accept()方法阻塞等待监听,获得新的连接
                System.out.println("等待连接");
                Socket socket=serverSocket.accept();
                System.out.println("已接收到连接,开始处理请求.....");
                //3.获得输入流
                InputStream is=socket.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(is));
                //获得输出流
                OutputStream os=socket.getOutputStream();
                PrintWriter pw=new PrintWriter(os);
                //4.读取用户输入信息
                String info=null;
                while(!((info=br.readLine())==null)){
                    System.out.println("我是服务器,用户信息为:"+info);
                }
                //给客户一个响应
                String reply="welcome!";
                pw.write(reply);
                pw.flush();
                //5.关闭资源
                pw.close();
                os.close();
                br.close();
                is.close();
                socket.close();
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    }

    二、客户端代码

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.InputStreamReader;
     5 import java.io.OutputStream;
     6 import java.io.PrintWriter;
     7 import java.net.Socket;
     8 import java.net.UnknownHostException;
     9 
    10 /**
    11  * 客户端
    12  * */
    13 public class LoginClient {
    14     public static void main(String[] args) {
    15         try {
    16             //1.建立客户端Socket连接,指定服务器的位置以及端口
    17             Socket socket=new Socket("localhost",8800);
    18             //2.得到Socket的读写流
    19             OutputStream os=socket.getOutputStream();
    20             PrintWriter pw=new PrintWriter(os);
    21             //输入流
    22             InputStream is=socket.getInputStream();
    23             BufferedReader br=new BufferedReader(new InputStreamReader(is));
    24             //3.利用流按照一定的协议对Socket进行读/写操作
    25             String info="用户名:Tom;用户密码:123456";
    26             pw.write(info);
    27             pw.flush();
    28             socket.shutdownOutput();
    29             //接受服务器的响应并打印显示
    30             String reply=null;
    31             while(!((reply=br.readLine())==null)){
    32                 System.out.println("我是客户端,服务器的响应为:"+reply);
    33             }
    34             //4.关闭资源
    35             br.close();
    36             is.close();
    37             pw.close();
    38             os.close();
    39             socket.close();
    40         } catch (UnknownHostException e) {
    41             // TODO Auto-generated catch block
    42             e.printStackTrace();
    43         } catch (IOException e) {
    44             // TODO Auto-generated catch block
    45             e.printStackTrace();
    46         }
    47         
    48     }
    49 }

     注意事项:

       调用Socket.shutdownOutput()后,禁用此套接字的输出流,对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列(即-1),之后,从另一端TCP套接字的输入流中读取数据时,如果到达输入流末尾而不再有数据可用,则返回 -1。

    就是说你没有调用shutdownOutput时,相当于没有跟服务器说“我已经说完啦,你可以说了”。那么服务器呢就觉得“哦,客户端还没说完,我要等它说完,要有礼貌”然后服务器就一直等,就阻塞了。他就不会给客户端发送消息“welcome”。禁用此套接字的输入流,还可以输出。禁用此套接字的输出流,还可以输入。 对一个socket关闭就不能重新打开了

    一个走投无路的庄稼汉
  • 相关阅读:
    des加密
    http请求报错
    js生成二维码(jquery自带)
    tomcat跨域请求
    jsp读取properties文件
    spring+mybatis整合读取不了配置文件
    svn提交报e200007错误
    firefox兼容性问题
    Oracle学习笔记(2)
    Spring设置定时器:quartz
  • 原文地址:https://www.cnblogs.com/kuangyefeige/p/9822803.html
Copyright © 2011-2022 走看看