import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
 
public class JabberServer
{
 
    public static void main(String[] args) throws IOException
    {
        // TODO 自动生成的方法存根
        new FuWuQi();
    }
 
}
 
class FuWuQi
{
    public static final int port = 8080;
 
    BufferedReader in = null;
    PrintWriter out = null;
 
    class JieShou extends TimerTask
    {
        public void run()
        {
            String string=null;
            try
            {
                string=in.readLine();
                if(string!=null)
                {
                    System.out.println(string);
                }
 
            } catch (Exception e)
            {
                // TODO: handle exception
            }
 
        }
    }
 
 
    public FuWuQi() throws IOException
    {
        ServerSocket s = new ServerSocket(port);// 创建一个服务器对象 它扫描的端口是 port
        System.out.println("开始");
        try
        {
            Socket socket = s.accept();// 此时程序会进入阻塞状态 即等待一个客户端连接 但 其他程序会正常
            try
            {
                System.out.println("有一个客户机连接" + socket);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);// true 参数可以 自动刷新流 若没有刷新 信息就不会进入网络除非缓冲区溢出
                // PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
 
                Timer timer=new Timer();
                JieShou jieShou=new JieShou();
 
 
                timer.schedule(jieShou, 10,200);
                while(true)
                {
                    Scanner in1=new Scanner(System.in);
                    out.println(in1.next());
                }
            //    timer.cancel();
 
 
            } catch (Exception e)
            {
 
            } finally
            {
                System.out.println("客户端 关闭");
                socket.close();// 套接字使用了非常重要的内存资源 所以一定要在用完之后关闭他们
            }
 
        } catch (Exception e)
        {
            // TODO: handle exception
        } finally
        {
            System.out.println("服务端关闭");
            s.close();
            System.exit(0);
        }
 
    }
}

基于TCP协议的服务器(单线程)的更多相关文章

  1. 基于TCP协议的服务器(多线程)

    import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; impo ...

  2. 基于TCP协议的客户端

    基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; im ...

  3. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  4. 浅析C#基于TCP协议的SCOKET通信

    TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实 ...

  5. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  6. 网络编程应用:基于TCP协议【实现对象传输】--练习

    要求: 基于TCP协议实现,客服端向服务器发送一个对象 服务器接受并显示用户信息 ,同时返回给客户端 "数据已收到" 建一个Student类,属性:name age Student ...

  7. 网络编程应用:基于TCP协议【实现文件上传】--练习

    要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...

  8. 网络编程应用:基于TCP协议【实现一个聊天程序】

    要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...

  9. 基于TCP协议的项目架构之Socket流传输的实现

    项目背景  某银行的影像平台由于使用时间长,服务器等配置原因,老影像系统满足不了现在日益增长的数据量的需求,所以急需要升级改造.传统的影像平台使用的是Oracle数据库和简单的架构来存储数据(视频.图 ...

随机推荐

  1. ubuntu 下的 ftp (gftp)

    功能和 windows 下的 ftp 一样 gftp安装方法apt-get install gftp启动方法:gfpt

  2. php计算最后一次,第一次字符串出现位置

    strpos($str, n) 首次,n在str第一次出现位置, strrpos($str, n) 最后一次,n在str最后一次出现位置 strripos区分大小写

  3. yii2 AR需要注意的地方

    $model::find(['id'=>1])->one();和$model::findOne(1); 返回的都是一个Obj不能使用foreach遍历,其他都是返回对象数组可以用forea ...

  4. 防止apche列出目录以及下载文件

    1.修改httpd.conf,将override none改为override all 2.在需要设置权限的目录上传.htaccess文件,.htaccess文件内容如下: <FilesMatc ...

  5. redis的安装-windows和linux

    windows 下载地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload 下载解压到D盘下: 进到该目录下,有下列文件: ...

  6. c++11的for新用法 (重新练习一下for_each)

    看到手册的代码里面有个for的很奇怪的用法,用了一把    http://www.cplusplus.com/reference/unordered_set/unordered_set/insert/ ...

  7. BestCoder Round #67 (div.2) N*M bulbs

    问题描述 N*M个灯泡排成一片,也就是排成一个N*M的矩形,有些开着,有些关着,为了节约用电,你要关上所有灯,但是你又很懒. 刚好有个熊孩纸路过,他刚好要从左上角的灯泡走去右下角的灯泡,然后离开. 但 ...

  8. Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法

    本例定义了4个类,这里说一下,方便下面讲解.分别是Product(产品),Producer(生产者),Consumer(消费者), Test(测试类). 多线程之间通信与共享数据只要引用同一内存区域就 ...

  9. 用powerdesigner建模工具生成数据库

    1,使用powerdesignerP:主键 F:外键 M:是否可为空 2,两张表建立主外键关系时,主外键名称要相同.比如A表 A_id name  说明id(P) B表 B_id name  说明id ...

  10. linq 动态排序

    /// <summary> /// 排序 /// </summary> /// <typeparam name="T"></typepar ...