zoukankan      html  css  js  c++  java
  • java知识学习42-TCP协议通信

    TCP协议原理:

      

      构造方法和常用方法:

        

        

      

      TCP发送数据的步骤:

        1、创建客户端的socket对象(Socket类);

        2、获取输出流,写数据; OutputStream getOutputStream();

        3、释放资源。 close();

      发送数据简易代码:

        

       

      TCP接收数据的步骤:

        1、创建服务器端的ServerSocket对象(ServerSocket类); ServerSocket(int port);

        2、监听客户端连接,创建一个监听套接字(返回一个Socket对象); Socket accept();

        3、获取输入流,写数据; IutputStream getIutputStream();

        4、释放资源。 close();

      接收数据简易代码:

        

    TCP通信-多线程练习案例:

     客户端:没执行一次,服务端分配一个线程执行,并生成一个文件

    import java.io.*;
    import java.net.Socket;

    public class ClientDemo {

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

    // 创建客户端socket对象
    Socket sc = new Socket("127.0.0.1", 10000);
    // 读取文件数据
    BufferedReader br = new BufferedReader(new FileReader("D:\JavaProject\src\com\company\demo11\ss.txt"));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));

    String line;
    while ((line=br.readLine())!=null) {

    bw.write(line);
    bw.newLine();
    bw.flush();
    }
    sc.shutdownOutput();

    // 客户端收到服务端反馈后,再次反馈给服务端
    BufferedReader bcr = new BufferedReader(new InputStreamReader(sc.getInputStream()));
    String str;
    while ((str=bcr.readLine())!=null) {
    System.out.println(str);
    }

    // 释放资源
    br.close();
    sc.close();

    }
    }

    服务端:
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class ServerDemo {

    public static void main(String[] args) throws IOException {
    // 创建服务端Socket对象
    ServerSocket ss = new ServerSocket(10000);

    while (true) {
    // 监听客户端
    Socket sa = ss.accept();

    // 用多线程方式实现每来一个客户端,就给这个客户端分配一个线程
    new Thread(new ServerThread(sa)).start();
    }

    // 释放资源
    // ss.close();
    }

    服务线程:
    import java.io.*;
    import java.net.Socket;

    public class ServerThread implements Runnable {

    private Socket sa;

    public ServerThread(Socket sa) {
    this.sa = sa;
    }

    @Override
    public void run() {

    // 接收客户端的信息,写入到文件中
    BufferedReader br = null;
    try {
    br = new BufferedReader(new InputStreamReader(sa.getInputStream()));
    int count = 0;
    String name = "src\com\company\demo11\sb"+count+".txt";
    File file = new File(name);

    while (file.exists()) {
    count++;
    name = "src\com\company\demo11\sb"+count+".txt";
    file = new File(name);
    }
    FileOutputStream osw = new FileOutputStream(file);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(osw));

    String line;
    while ((line=br.readLine())!=null) {

    bw.write(line);
    bw.newLine();
    bw.flush();
    }

    // 收到数据后给客户端反馈
    BufferedWriter bow = new BufferedWriter(new OutputStreamWriter(sa.getOutputStream()));
    bow.write("服务端已经收到数据了!!!");
    bow.flush();
    sa.shutdownOutput();

    // 释放资源
    bw.close();
    sa.close();

    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    }
  • 相关阅读:
    JaunsGraph数据模型
    JanusGraph的schema及数据建模
    JanusGraph Server配置
    JanusGraph与Cassandra集成模式
    cassandra的primary key, partition key, cluster key,
    Predix Asset Service深度分析
    Predix中模型设计
    web工程中web.xml元素加载顺序以及配置实例
    Tomcat,Jboss,Glassfish等web容器比较选型
    intelliJ idea像eclipse一样在class中断点调试
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14691952.html
Copyright © 2011-2022 走看看