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();
    }

    }
    }
  • 相关阅读:
    07java基础知识
    06java基础知识
    我们都忽略了Html5的力量,如果只看成一种技术就大错特错了!
    “微信应用号对行业影响”之一,app开发速来围观
    App开发中甲乙方冲突会闹出啥后果?H5 APP 开发可以改变现状吗
    开发APP不搞清楚这20个问题,必然沦为一场灾难
    H5 App设计者需要注意的21条禁忌
    H5 APP开发必读,20个你不知道的Html5新特征和窍门
    H5 App如此强悍,要降薪的恐怕已不只是iOS程序员
    关于APP,原生和H5开发技术的争论
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14691952.html
Copyright © 2011-2022 走看看