[JAVA100例]044、多线程服务器:每个人都有份

// 文件名:moreServer.java
import java.io.*;
import java.net.*;
import java.util.*;
/**
* <p>Title: 多线程服务器</p>
* <p>Description: 本实例使用多线程实现多服务功能。</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: </p>
* @version 1.0
*/
class moreServer
{
public static void main (String [] args) throws IOException
{
  System.out.println ("Server starting...\n");
  //使用8000端口提供服务
  ServerSocket server = new ServerSocket (8000);
  while (true)
  {
   //阻塞,直到有客户连接
   Socket sk = server.accept ();
   System.out.println ("Accepting Connection...\n");
   //启动服务线程
   new ServerThread (sk).start ();
  }
}
}
//使用线程,为多个客户端服务
class ServerThread extends Thread
{
private Socket sk;

ServerThread (Socket sk)
{
  this.sk = sk;
}
//线程运行实体
public void run ()
{
  BufferedReader in = null;
  PrintWriter out = null;
  try{
   InputStreamReader isr;
   isr = new InputStreamReader (sk.getInputStream ());
   in = new BufferedReader (isr);
   out = new PrintWriter (
      new BufferedWriter(
       new OutputStreamWriter(
        sk.getOutputStream ())), true);
while(true){
    //接收来自客户端的请求,根据不同的命令返回不同的信息。
    String cmd = in.readLine ();
    System.out.println(cmd);
    if (cmd == null)
      break;
    cmd = cmd.toUpperCase ();
    if (cmd.startsWith ("BYE")){
     out.println ("BYE");
     break;
    }else{
     out.println ("你好,我是服务器!");
    }
   }
   }catch (IOException e)
   {
    System.out.println (e.toString ());
   }
   finally
   {
    System.out.println ("Closing Connection...\n");
    //最后释放资源
    try{
    if (in != null)
     in.close ();
    if (out != null)
     out.close ();
     if (sk != null)
      sk.close ();
    }
    catch (IOException e)
    {
    System.out.println("close err"+e);
    }
   }
}
}
//文件名:SocketClient.java
import java.io.*;
import java.net.*;
class SocketThreadClient extends Thread
{
public static int count = 0;
//构造器,实现服务
public SocketThreadClient (InetAddress addr)
{
  count++;
  BufferedReader in = null;
  PrintWriter out = null;
  Socket sk = null;
  try{
  //使用8000端口
  sk = new Socket (addr, 8000);
  InputStreamReader isr;
  isr = new InputStreamReader (sk.getInputStream ());
  in = new BufferedReader (isr);
  //建立输出
  out = new PrintWriter (
      new BufferedWriter(
      new OutputStreamWriter(
       sk.getOutputStream ())), true);
  //向服务器发送请求
  System.out.println("count:"+count);
  out.println ("Hello");
  System.out.println (in.readLine ());
  out.println ("BYE");
  System.out.println (in.readLine ());
}
  catch (IOException e)
  {
  System.out.println (e.toString ());
  }
  finally
  {
  out.println("END");
  //释放资源
  try
  {
   if (in != null)
   in.close ();
   if (out != null)
   out.close ();
   if (sk != null)
   sk.close ();
  }
  catch (IOException e)
  {
  }
  }
}
}
//客户端
public class SocketClient{
  public static void main(String[] args) throws IOException,InterruptedException
  {
   InetAddress addr = InetAddress.getByName(null);
    for(int i=0;i<10;i++)
     new SocketThreadClient(addr);
    Thread.currentThread().sleep(1000);
  }
}

时间: 2024-10-09 03:50:05

[JAVA100例]044、多线程服务器:每个人都有份的相关文章

JAVA100例专题

[JAVA100例]041.执行系统命令 [JAVA100例]078.播放声音 [JAVA100例]077.应用JAR包 [JAVA100例]076.在Applet中使用Swing [JAVA100例]075.检测键盘事件 [JAVA100例]074.检测鼠标事件 [JAVA100例]073.传递参数 [JAVA100例]072.欢迎进入Applet世界 [JAVA100例]071.使用JDOM操作XML [JAVA100例]070.使用JDOM解析XML [JAVA100例]069.使用SAX

不是什么人都可以称作seoer

大家好,我是魏东东.已经好久没有认认真真的写一些文章了.今天心情压抑想写一下关于这段时间的seo心得体会.文章的题目叫<不是什么人都可以叫seoer>,是本人互联 网首创作品.写本文的目的不是来宣扬本人是一个真正的seoer,而是本人不是,所以写下这篇文章用意就是鼓励自己,第二个方面就是警惕那些过于自以为是,盲目不屑一顾的自 命清高的伪seoer们把我们seo这一行搞的白菜价,渐渐的失去了soer们特有的光环. 先谈一下目前seo在国内的现状吧,本人目光狭隘,看的不准确,希望高手多批评. se

多线程服务器的常用编程模型

本文主要讲我个人在多线程开发方面的一些粗浅经验.总结了一两种常用的线程模型, 归纳了进程间通讯与线程同步的最佳实践,以期用简单规范的方式开发多线程程序. 文中的"多线程服务器"是指运行在 Linux 操作系统上的独占式网络应用程序.硬件平 台为 Intel x64 系列的多核 CPU,单路或双路 SMP 服务器(每台机器一共拥有四个核或八 个核,十几 GB 内存),机器之间用百兆或千兆以太网连接.这大概是目前民用 PC 服务器 的主流配置. 本文不涉及 Windows 系统,不涉及人机

香港科技大学教授杨强:云计算、大数据能让每个人都享受到AI红利

 5月19日,由中国电子学会主办,ZD至顶网协办的第八届中国云计算大会进入第二日程,第四范式首席科学家.机器学习领域国际学术带头人.香港科技大学教授杨强在现场带来了"AI For Everyone"的主题演讲. 杨强表示,"我们所说的强人工智能和超级人工智能,实际上并不是我们需要害怕的东西,我们需要害怕的东西是我们的技术,一定需要大数据,但是我们本身又没有大数据这样的红利.相反我们要发展的技术是这样的,把知识迁移到身上,短时间通过小数据能够学习.能够成长,如果我们有能力把大数

99%的人都理解错了HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么. 当你在面试中被问到这个问题,你的内心充满了自信和喜悦. 你轻轻松松的给出了一个"标准答案": GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被

用路由做企业管理:所有人都说不可能的时候(上)

  文章导航: <用路由做企业管理:所有人都说不可能的时候(上)> <用路由做企业管理:所有人都说不可能的时候(中)> <用路由做企业管理:所有人都说不可能的时候(下)> 5月26日雷锋网(公众号:雷锋网)主办的 OpenWrt 沙龙上有一份意外收获,一个在路由器上集成办公自动化软件(OA系统),或者说企业协作平台的产品主题演讲,引发了阵阵掌声.要知道,让一帮技术宅自发鼓掌可不是一件容易事. "用 OpenWrt 实现微小企业管理",活动开始前拿到这

udp-关于UDP和TCP客户端单例的多线程问题

问题描述 关于UDP和TCP客户端单例的多线程问题 要求是客户端这边需要一个UDP客户端发送心跳包和一个TCP客户端提供一个可以向TCP服务器发送消息的接口( 要求长连接 ).需要两个线程来维护这两个单例的客户端.现在问题就来了,我对于多线程这方面不是特别懂,怎样开启两个线程启动两个客户端,并且TCP客户端的线程开启之后,调用接口之后就可以向服务端发送TCP消息(TCP是长连接,所以这个单例也要一直在运行).然后就是UDP这块,也需要开启一个线程来持续向服务端发送心跳包. 我用的是MINA写的客

java-android软件的服务器程序一般都是处理哪些请求的,除了登录查询请求

问题描述 android软件的服务器程序一般都是处理哪些请求的,除了登录查询请求 android软件的服务器程序一般都是处理哪些请求的,除了登录查询请求 解决方案 再比如游戏应用,游戏室的维护,这个就必须在服务器上.不能因为一个用户的手机关机了,所有人都不玩了吧. 解决方案二: 服务器程序存储数据,完成重要的业务逻辑.比如说支付宝,显然余额的存储,以及扣款都必须在服务器完成,要不然客户端用户随便可以修改就乱套了. 解决方案三: 比如数据上传到服务器啊等等.很多看需求.

使用cluster 将自己的Node服务器扩展为多线程服务器_node.js

用nodejs的朋友都有了解,node是单线程的,也就是说跑在8核CPU上,只能使用一个核的算力. 单线程一直是node的一个诟病,但随着0.6版本中引入cluster之后,这个情况则得到了改变,开发人员可以依靠cluster很轻松的将自己的Node服务器扩展为多线程服务器了. 什么是Cluster cluster是node提供的一个多线程库,用户可以使用它来创建多个线程,线程之间共享一个监听端口,当有外部请求这个端口时,cluster会将请求转发到随机线程里.因为每个node线程都会占用几十兆