首页 > 其他分享 >TCP

TCP

时间:2024-07-30 22:06:24浏览次数:4  
标签:java Socket bos TCP import new public

package com.itheima.threadpool;

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

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",10000);

        //是本地的流,用来读取本地文件的.
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("optimizeserver\\ClientDir\\1.jpg"));

        //写到服务器 --- 网络中的流
        OutputStream os = socket.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(os);

        int b;
        while((b = bis.read())!=-1){
            bos.write(b);//通过网络写到服务器中
        }
        bos.flush();
        //给服务器一个结束标记,告诉服务器文件已经传输完毕
        socket.shutdownOutput();



        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while((line = br.readLine()) !=null){
            System.out.println(line);
        }


        bis.close();
        socket.close();


    }
}


package com.itheima.threadpool;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10000);
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,//核心线程数量
                10,   //线程池的总数量
                60,   //临时线程空闲时间
                TimeUnit.SECONDS, //临时线程空闲时间的单位
                new ArrayBlockingQueue<>(5),//阻塞队列
                Executors.defaultThreadFactory(),//创建线程的方式
                new ThreadPoolExecutor.AbortPolicy()//任务拒绝策略
        );

        while (true) {
            Socket accept = ss.accept();
            ThreadSocket ts = new ThreadSocket(accept);
            //new Thread(ts).start();
            pool.submit(ts);

        }
        //ss.close();


    }
}



package com.itheima.threadpool;

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

public class ThreadSocket implements Runnable {
    private Socket acceptSocket;

    public ThreadSocket(Socket accept) {
        this.acceptSocket = accept;
    }

    @Override
    public void run() {
        BufferedOutputStream bos = null;
        try {
            //网络中的流,从客户端读取数据的
            BufferedInputStream bis = new BufferedInputStream(acceptSocket.getInputStream());
            //本地的IO流,把数据写到本地中,实现永久化存储
            bos = new BufferedOutputStream(new FileOutputStream("optimizeserver\\ServerDir\\" + UUID.randomUUID().toString() + ".jpg"));

            int b;
            while((b = bis.read()) !=-1){
                bos.write(b);
            }

            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(acceptSocket.getOutputStream()));
            bw.write("上传成功");
            bw.newLine();
            bw.flush();


        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(bos != null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (acceptSocket != null){
                try {
                    acceptSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

  

标签:java,Socket,bos,TCP,import,new,public
From: https://www.cnblogs.com/wscp/p/18333436

相关文章

  • TCP为什么需要四次挥手?
    tcp为什么需要四次挥手?答案有两个:1.将发送fin包的权限交给被动断开方的应用层去处理,也就是让程序员处理2.接第一个答案,应用层有了发送fin的权限,可以在发送fin前继续向对端发送消息为了搞清楚这个问题,我们先要了解四次挥手的过程:1.注意事项tcp四次挥手过程中没有客户......
  • Winform程序控制网络继电器(康耐德,泥人..)运用Socket,TCP协议
    //继电器官网查看命令https://www.konnad.com/service/download/product-model/sdd4040-ad3staticbyte[]DOON=newbyte[]{0x00,0x01,0x00,0x00,0x00,0x06,0xFF,0x05,0x00,0x64,0xFF,0x00};//控制继电器打开(DO-1灯亮)staticbyte[]DOOFF=new......
  • Modbus TCP/ip Logosoft Comfort V8
    我正在做一个学校项目,其中包括徽标和我的计算机之间的tcp/ip通信,但我无法使其工作。我并不是想创建一个服务器,我只是想将一个值从我的计算机发送到徽标的网络数字输入。标志ip:192.168.0.2网络输入ID:1TCP/IP端口:502网络输入地址:1Estoyhaciendounproyectoescolar,qu......
  • 基于EasyTcp4Net开发一个功能较为完善的去持久化聊天软件
    之前自己写了一篇介绍TCP的一些常用的功能介绍和特征,并且用代码做了示例,最终开发了一个EasyTcp4Net的TCP工具库,其最大的特色就是使用了微软提供的高性能库中的一些数据结构来处理TCP数据。最近辞职待业在家,也没啥事做,就利用自己写的TCP通讯库基础上开发了一个示例的聊天程序,功能......
  • TCP协议详解
    TCP协议详解TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在网络通信中扮演着至关重要的角色,尤其是在需要保证数据完整性和顺序性的应用场景中。以下是对TCP协议的详细解析,包括其工作原理、特点、应用场合以及关......
  • java中的tcp
    在Java中,TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它运行在IP(InternetProtocol,互联网协议)层之上,为应用层提供可靠的通信服务。TCP通过确保数据包的顺序传输、重传丢失的数据包以及错误检测,来保证数据的完整性和可......
  • 如何理解tcp的三次握手?
    TCP(传输控制协议)是一种网络通信协议,用于可靠地传输数据。它是互联网协议套件(TCP/IP)中的一部分,负责将数据分割成小块(称为数据包),通过网络传输,然后在接收端重新组装这些数据包,确保它们按照正确的顺序到达,并且没有丢失或损坏。三次握手是TCP连接建立过程中的一个重要步骤。在三次......
  • Linux网络:传输层协议TCP(三)滑动窗口及流量控制
    目录一、关于滑动窗口在TCP中的应用1.1什么是滑动窗口,为什么要有滑动窗口1.2滑动窗口的实现1.3滑动窗口针对丢包重传的处理机制二、流量控制一、关于滑动窗口在TCP中的应用1.1什么是滑动窗口,为什么要有滑动窗口在上一篇博文中博主阐述了确认应答ACK策略,对每一个对......
  • 如何在 Python 中从 Milesight TrafficX 摄像头、Post(MQTT、TCP/IP、HTTP) 获取数据?
    你好,祝你度过愉快的一天或一夜,我有这个MilesightTrafficX摄像头已启动并正在运行,仪表板中有一个名为POST的设置,您可以在下图中看到:我想要的是知道如何设置这些设置(基于实际上我的意思是)能够在我的Python代码中接收数据。无论协议如何,数据都将如下所示:......
  • 网络协议 TCP、UDP 和 HTTP
    TCP与UDPTCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)是两个广泛使用的传输层协议,它们在数据传输的方式、可靠性和应用场景方面有显著的区别。TCP特点:面向连接:TCP是面向连接的协议,传输数据前需建立连接(三次握手)。可靠传输:TCP通过确认(ACK)、序列号、重传......