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通常也称作"套接字",用 ...
随机推荐
- centos 7 虚拟机启用网卡
1.vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 2.编辑默认网卡配置文件,将ONBOOT由no改为yes,编辑完成后,按ESC回至命令模板,输入&qu ...
- kubernetes-控制器Deployment和DaemonSet(八)
Pod与controllers的关系 •controllers:在集群上管理和运行容器的对象•通过label-selector相关联•Pod通过控制器实现应用的运维,如伸缩,升级等 控制器又称工作负载 ...
- Mysql--7种Join查询
0.sql的执行顺序 手写顺序 机读顺序 总结 ①From:对from左边的表和右边的表计算笛卡尔积,产生虚拟表c1 ②On:对c1中的数据进行on过滤,只有符合过滤条件的数据记录才会记录在虚拟表c2 ...
- python简单实用gunicorn部署
linux 安装 pyuthon 安装 pip install gunicorn manage.py 文件 from app import create_app app = create_app( ...
- 九、Shell 流程控制
Shell 流程控制 和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { ...
- MySQL批量插入大量数据方法
在MySQL数据库中,如果要插入上百万级的记录,用普通的insert into来操作非常不现实,速度慢人力成本高,推荐使用Load Data或存储过程来导入数据,我总结了一些方法分享如下,主要基于My ...
- pip3 的安装 同时安装lxml和pygame
ubuntu18.04中 首先查看自己电脑的python版本,一般都会有2, 和3 python -V python3 -V 查看pip版本 pip -V pip3 -V 现在我们就可以开始安装我们的 ...
- Scrapy-redis分布式爬虫爬取豆瓣电影详情页
平时爬虫一般都使用Scrapy框架,通常都是在一台机器上跑,爬取速度也不能达到预期效果,数据量小,而且很容易就会被封禁IP或者账号,这时候可以使用代理IP或者登录方式爬,然而代理IP很多时候都很鸡肋, ...
- Charles Babbage【查尔斯·巴贝奇】
Charles Babbage When Babbage was working at Cambridge, a new idea occurred to him. 巴贝奇在剑桥工作的时候,脑海中有了 ...
- Problem E. TeaTree - HDU - 6430 (树的启发式合并)
题意 有一棵树,每个节点有一个权值. 任何两个不同的节点都会把他们权值的\(gcd\)告诉他们的\(LCA\)节点.问每个节点被告诉的最大的数. 题解 第一次接触到树的启发式合并. 用一个set维护每 ...