zoukankan      html  css  js  c++  java
  • 网络编程—代码—TCP网络传输

    一、TCP:用字符流传输信息

    ------------------------------------------------------------------------------

    [用字符流的要点提示]

    1:

    将套接字关闭之后,字符流自然也就关闭了,所以只需要socket.shutdownOutput();/socket.shutdownInput();

    应为套接字开启的字节流封装在字符流Buffered里面,若果先关闭字符流bw.close(),将会关闭套接字。 抛出java.net.SocketException: Socket is closed异常,说明已经将套接字关闭。

    2:必须要写入换行符bw.newLine();(或者在内容末尾加 ),这样在用BufferedReader的readerLine() 接收数据包的时候才能读取到一个换行信息,否则会出现读取错误。

    ------------------------------------------------------------------------------

    public class Tcpc { // 客户端

     

    public static void main(String[] args) throwsUnknownHostException, IOException {

    //1.创建套接字指定主机和端口

    Socket socket = new Socket(InetAddress.getLocalHost(),8808);

    //2打开输入输出流

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    //准备要撒送的数据

    String send = "我是客户端,请求登录!";

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

    bw.write(send);

    bw.newLine();

    bw.flush();

    socket.shutdownOutput();

     

    //4.准备接受返回的信息,并用行读取

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String lin =br.readLine();

    System.out.println("客户端开始接受信息!");

    while(lin!=null){

    System.out.println(lin);

    lin=br.readLine();

    }

    //5关闭资源

    socket.shutdownInput();

     

    }

    }

    -------------------------------------------------------------------------

    public class Tcps { // 服务端

    public static void main(String[] args) throws IOException {

    //1创建套接字,到指定的端口接受信息

    ServerSocket serversocket = new ServerSocket(8808);

    //2监听客户端的消息

    Socket socket = serversocket.accept();

    //3.打开输入输出的流

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    //4封装一个行读取的流

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String lin = br.readLine();

    while(lin!=null){

    System.out.println(lin);

    lin = br.readLine();

    }

    socket.shutdownInput();

    //5给客户端一反馈

    String replay="我是服务端,允许登录!";

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

    bw.write(replay);

    bw.newLine();

    bw.flush();

     

    //6关闭资源

     

    socket.shutdownOutput();

     

    }

    }

    ------------------------------------------------------------------------------

     

    二、TCP字节流传输信息

     

    TCP:字节流传输信息

    -------------------------------------------------------------------------------------

    public class Tcpc { //客户端

    public static void main(String[] args) throwsUnknownHostException, IOException {

    //1.创建套接字指定主机和端口

    Socket socket = new Socket(InetAddress.getLocalHost(),8808);

    //2打开输入输出流

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    //准备要撒送的数据

    String send = "我是客户端,请求登录!";

    os.write(send.getBytes());

    socket.shutdownOutput();

     

    //4.准备接受返回的信息,并用行读取

    System.out.println("客户端接受完毕!");

    byte[] by = new byte[1024];

    is.read(by);

    System.out.println(new String(by,0,by.length));

    //5关闭资源

    socket.shutdownInput();

     

    }

    }

     

    -------------------------------------------------------------------------------------

    public class Tcps { //服务端

    public static void main(String[] args) throws IOException {

    //1创建套接字,到指定的端口接受信息

    ServerSocket serversocket = new ServerSocket(8808);

    //2监听客户端的消息

    Socket socket = serversocket.accept();

    //3.打开输入输出的流

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    //4封装一个行读取的流

     

    System.out.println("服务端接收完毕!");

    byte[] by = new byte[1024];

    is.read(by);

    System.out.println(new String(by,0,by.length));

    socket.shutdownInput();

    //5给客户端一反馈

    String replay="我是服务端,允许登录!";

     

    System.out.println("服务端反馈完毕!");

    os.write(replay.getBytes());

    //6关闭资源

     

    socket.shutdownOutput();

     

    }

    }

     

  • 相关阅读:
    窗口总在最前的时候信息框弹出解决
    IP地址与子网掩码知识
    六类线、五类线、超五类线有什么区别?
    如何删除internet网关连接图标
    密码输入框用“●”做遮盖符
    万象2004数据库说明
    客户机绑定路由例子bat
    命令行下导入、导出注册表
    网管维护常用命令
    hadoop shell 操作命令
  • 原文地址:https://www.cnblogs.com/domi22/p/8046879.html
Copyright © 2011-2022 走看看