线程池 java socket服务器基础

可以用类似 while(true)input.readByte()来想得到客户端发送过来的数据。 用output的writeByte来像客户端发送数据。

服务器的socket是通过serverSocket.accept()方法来产生的。
用这个类实现线程池。
看例子,如下代码实现的功能很简单,就是客户端发送一个字节,服务器读到客户端发送的数据后打印它。

 

 代码如下 复制代码
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
class NetworkService implements Runnable {
    private final ServerSocket serverSocket;
    private final ExecutorService pool;
 
    public NetworkService(int port, int poolSize) throws IOException {
        serverSocket = new ServerSocket(port);
        pool = Executors.newFixedThreadPool(poolSize);
    }
 
    public void run() { // run the service
        try {
            for (;;) {
                pool.execute(new Handler(serverSocket.accept()));
            }
        } catch (IOException ex) {
            pool.shutdown();
        }
    }
 
    public static void main(String[] args) {
        NetworkService ns = null;
        try {
            ns = new NetworkService(400, 5);
        } catch (IOException e) {
            e.printStackTrace();
        }
        new Thread(ns).start();
    }
}
 
class Handler implements Runnable {
    private final Socket socket;
    private DataInputStream input;
    private DataOutputStream output;
    Handler(Socket socket) {
        this.socket = socket;
        try {
            input =new DataInputStream(socket.getInputStream());
            output = new DataOutputStream(socket.getOutputStream());
            System.out.println("new connect");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public void run() {
        int data;
        while(true){
            try {
                data = input.readByte();
                System.out.println(data);
            } catch (IOException e) {
                break;
            }
        }
        System.out.println("close");
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端

 代码如下 复制代码

var socket:Socket=new Socket(400);
socket.addEventListener("connect",function():void{socket.writeByte(100)});

时间: 2024-09-20 05:40:51

线程池 java socket服务器基础的相关文章

如何用java线程池和socket实现群聊和私聊,求大神指教

问题描述 如何用java线程池和socket实现群聊和私聊,求大神指教 刚学习完javaSE,需要做一个小小的聊天软件,需要实现私聊和群聊的功能:本人觉得应当使用线程池和socket.IO流来实现,但不知道怎么做?求各位大神给点意见,不胜感激~ 解决方案 http://download.csdn.net/detail/z344310362/7579373 解决方案二: 群聊就是把消息发到一个聊天室,,私聊直接通过服务端发送给个人就行了 解决方案三: 我给你一个java聊天软件的参考吧:java聊

spring线程池-java线程,spring 线程池

问题描述 java线程,spring 线程池 大家好: 我现在有几个疑惑的地方 1.如果使用spring 线程池,或者java自带的线程池,那应用程序中的所有线程都 受到创建的这个线程池管理,还是只通过线程池.execute加进去的才被管理. 2.spring MVC 线程池threadPoolTaskExecutor 配置了最少活跃线程10个,最大10个, 那如果线程池中已经有10个活跃的线程在执行,如果继续往线程池中execute,此时的线程 是出于等待,还是直接挂掉,这个spring的线程

线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

问题描述 使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求 初学java,目前写了一个服务端和一个客户端.大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信.也仅仅是是接受和返回简单的字符串.部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"

java socket 服务器 如何用 有限的 线程 来管理 所有 客户端。

问题描述 如题,我以前做socket的时候,都是客户端来一个我就启动一个线程来管理这个客户端,所以有点想不通,希望有大神给点提示. 解决方案 解决方案二:先自己订一下.解决方案三:NIO+线程池解决方案四:@xuefeng0707我大概知道是找个感念,我在以前做的时候,启动一个新线程,这个线程有个死循环,来一直接收客户端发送的消息,但是如何用线程池来做这个事情,当线程池的上限为20现在来了100个客户端,这100个客户端都在给我发消息,我如何去获取,这个是我比较纠结的地方.解决方案五:线程池客户

线程通信-Java socket通信 使用jconsole监控发现线程数不断增加

问题描述 Java socket通信 使用jconsole监控发现线程数不断增加 Java socket 使用线程通信,作为接收方每接收一个交易信息,使用jsonsole监控线程发现线程数量增加22个左右,经生产环境运行结果,当已启动线程总数达到2600多时 tomcat出现类似于假死的状况,不再接收任何交易信息.目前正在使用系统定时任务每天定时重启(每日交易量在70-80左右),求大手帮我分析下,现在附上图片和部分代码.jsonsole监控图:部分代码;public class SimpleS

线程池实现socket 通信问题,不能长时间运行。

问题描述 1.创建一个监听import java.io.IOException;import java.net.*;import java.util.concurrent.Future;public class Listener extends ServerSocket implements Runnable {public Listener() throws IOException {super(Server.AppConfig.getLocalhost().getListenport());

C#线程系列讲座(3):线程池和文件下载服务器

如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一 定程序上消耗服务器的资源.为此,一个最好的解决方法就是在服务器启动之前 ,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中 获得线程对象,并处理请求.保存这些线程对象的结构就叫做线程池. 在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下, ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不

线程池及并发编程基础总结

常用线程池 可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程 ExecutorService threadPool = Executors.newFixedThreadPool(3);// 创建可以容纳3个线程的线程池 根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们 ExecutorService threadPool = Executors.newCachedThreadPool();// 线程池的大小会根据执行的任务数动态分配 使用单个 worker 线程的

论Java Web应用中调优线程池的重要性_java

不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求.线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的.本文主要介绍Java线程池的使用和如何正确的配置线程池. 单线程 我们先从基础开始.无论使用哪种应用服务器或者框架(如Tomcat.Jetty等),他们都有类似的基础实现.Web服务的基础是套接字(socket),套接字负责监听端口,等待TCP连接,并接受TCP连接.一旦TCP连接被接受,即可从新创建的TCP连接中读取和发送数据. 为了能够理解上述流