Socket通信入门小实例
客户端:
public class Client {
    private int port = 8000;
    private String host = "localhost";
    private Socket socket;  
    public Client() throws UnknownHostException, IOException {
        socket = new Socket(host, port);
    }  
    public void readFromUser() throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = br.readLine()) != null){
            if(line.equals("bye")){
                socket.close();
                System.out.println("关闭socket");
                break;
            }
            send(line);
        }
    }  
    public void send(String msg) throws IOException {
        PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
        pw.println(msg);
    }  
    public static void main(String args[]) throws UnknownHostException,
            IOException {
        new Client().readFromUser();
    }
}
服务端:
public class Server {
    private int port = 8000;
    private ServerSocket serverSocket;
    private ExecutorService executorService;
    private final int POOL_SIZE = 4;  
    public Server() throws IOException {
        serverSocket = new ServerSocket(port, 2);
        // 创建线程池
        executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
                .availableProcessors()
                * POOL_SIZE);
        System.out.println("服务器启动。。。。。" + "初始线程数:"
                + Runtime.getRuntime().availableProcessors() * POOL_SIZE);
    }  
    public void service() throws IOException {
        int count = 0;
        while (true) {
            Socket socket = serverSocket.accept();
            System.out.println(++count + "客户端已链接");
            // new Thread(new Handler(socket)).start();
            executorService.execute(new Handler(socket));
        }
    }  
    public static void main(String args[]) throws IOException {
        new Server().service();
    }  
    private class Handler implements Runnable {  
        private Socket socket;  
        public Handler(Socket socket) {
            this.socket = socket;
        }  
        public void run() {
            try {
                handle();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }  
        private void handle() throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                if(line.equals("goodbye")){
                    socket.close();
                    serverSocket.close();
                    break;
                }
                System.out.println("From " + socket.getPort() + ":" + line);
            }
        }
    }
}
服务器采用了JDK自带的线程池来处理并发请求。
还可以使用NIO来实现,即非阻塞通信
Socket通信入门小实例的更多相关文章
- socket 通信 入门3 android 客户端 C# 服务端
		
这是一个android端操控服务器的例子 就是发送简单指令到服务器 然后服务器响应什么的... 当然这里是未完成的 只是简单展示一下大致思路 首先连接建立起来后 服务端给客户端一条信息 告诉 ...
 - Python 入门小实例笔记
		
实例1:打印用户输入的姓名与手机号码知识点:编码,获取输入,变量,标准输出 #encoding=utf-8 import time #1.提示用户输入信息 name = input ("请输 ...
 - 简单的Linux下的socket通信,小程序,方便以后查看。
		
首先是我的一个出错提示的头文件<myerr.h>,自从用了根本停不下来啊!!! #ifndef _MYERR_H_ #define _MYERR_H_ #include <stdio ...
 - socket通信入门
		
以一个基本的python程序为例解释 源代码如下: #!/usr/bin/env python #指出代码用什么程序去运行它.首先会到env设置里查找python的安装路径,再调用对应路径下的解释器 ...
 - Vue中Vuex的详解与使用(简洁易懂的入门小实例)
		
怎么安装 Vuex 我就不介绍了,官网上有 就是 npm install xxx 之类的.(其实就是懒~~~哈哈) 那么现在就开始正文部分了 众所周知 Vuex 是什么呢?是用来干嘛的呢? Vuex ...
 - Linux下简单的socket通信实例
		
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
 - (8)Linux(客户端)和Windows(服务端)下socket通信实例
		
Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows Client端 #include <st ...
 - Flex通信-与Java实现Socket通信实例
		
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
 - php 实例说明 socket通信机制
		
php 实例说明 socket通信机制 张映 发表于 2010-04-24 分类目录: php 一,socket是什么 什么是socket 所谓socket通常也称作"套接字",用 ...
 
随机推荐
- python_38_try-except异常处理语句及raise的使用
			
# i=10 # print(30/(i-10)) # #程序将会出现以下报错信息 # # Traceback (most recent call last): # # File "C:/U ...
 - python_19_编码解码
			
msg="我爱北京天安门" #字符串转成Byte类型 print(msg.encode())#encode 编码 print(msg.encode(encoding="u ...
 - matlab一次读取多张图片
			
实验平台:matlab R2010Rb 读取C:\Users\KCl\Documents\MATLAB\SRCNN\Set5文件夹下所有bmp文件,并存储到im字典中 clear all clc im ...
 - 阿里云服务器下安装LAMP环境(CentOS Linux 6.3)(1)
			
阿里的云服务器准备好以后,我们首先要做的就是把自己购买的磁盘空间挂载到系统里面,我们为服务器选择的是 Linux 系统,确切说的是 CentOS 系统. 默认阿里云服务器带了一个 20G 的空间,一般 ...
 - 跟我一起从零开始学WCF系列课程
			
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/WCF_Begin.aspx 服务和协定 服务协定使 ...
 - Wordpress菜单函数wp_nav_menu各参数详解及示例
			
Wordpress菜单函数wp_nav_menu各参数详解及示例 注册菜单 首先要注册菜单,将以下函数添加至function.php函数里 register_nav_menus(array( ...
 - java web用户登录界面
			
做这次实验,主要用到了mysql java web 的 内容 实验代码: IUserDao.java package com.jaovo.msg.dao; import java.util.List ...
 - Linux-准备工作
			
首先安装一个box,安装一个centos7,然后就是xshell,接下来就是 查看ip ifconfig ip addr vi /etc/sysconfig/network-scripts/ifcfg ...
 - tp5查询
			
TP5的EXP.批量查询.聚合查询等. <!--more--> //使用EXP条件表达式,表示后面是原生的SQL表达式 $result = Db::table('think_inno')- ...
 - JZOJ 5777. 【NOIP2008模拟】小x玩游戏
			
5777. [NOIP2008模拟]小x玩游戏 (File IO): input:game.in output:game.out Time Limits: 1000 ms Memory Limits ...