文档章节

传统的Socket编程

 幸福快乐的小码农
发布于 2017/08/14 22:30
字数 309
阅读 4
收藏 0

一、创建一个Server端

1、创建一个ServerSocket端,并绑定一个端口

ServerSocket serverSockdet  = new ServerSocket(port);

2、接收客户端连接

Socket socket = serverSocket.accept();

3、处理客户端请求

伪代码:

public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8766);
            System.out.println("server is working....");

            Socket socket = serverSocket.accept();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String receive = bufferedReader.readLine();
            System.out.println("我收到了客户端给我的请求: " + receive);
//
            PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
            printWriter.println("你好啊,欢迎光临");

            bufferedReader.close();

            printWriter.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

二、创建客户端

1、创建Socket,Socket socket = new Socket(port);

2、发送请求到服务端

伪代码

PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
try {
    Socket socket = new Socket("127.0.0.1", 8766);
    System.out.println("客户端启动了。。。");

    printWriter = new PrintWriter(socket.getOutputStream(), true);
    printWriter.println("我是客户端,我来请求你" + "\n");

    bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String response = bufferedReader.readLine();
    System.out.println("这是服务端给我的响应:" + response);

这里有个注意点:

printWriter.println() 发送消息的时候,要使用println(),不使用print(),否则服务端读取会有问题。 这是因为使用println()后会,结尾会有\n,表示已经写完了,否则服务端使用readLine()认为一直读。

 

传统的BIO弊端:来一个客户端请求,创建一个线程去处理,优化的方式呢,伪异步,就是使用线程池

 

 

© 著作权归作者所有

上一篇: IO与NIO
下一篇: 线程工具类
粉丝 0
博文 12
码字总数 5501
作品 0
闸北
私信 提问
Netty 之传统 BIO、NIO 编程

说明 系列文章:http://www.jianshu.com/p/594441fb9c9e 本文完全参考自《Netty权威指南(第2版)》,李林峰著。 传统 BIO 编程是什么样的? 基本的网络编程模型是,即两个进程间相互通信,其...

被称为L的男人
2017/09/02
0
0
基于io的socket编程

传统的socket io中,如果需要同时接受多个连接的时候。必须要使用多线程,为每一个连接创建一个线程。这样在连接数量比较大的情况,线程的数量也随之变大。虽然这样编程简单,但是缺点也十分...

少不读水浒
2016/10/15
19
0
PHP结合Python的WEB开发技术--ppython

许多人在纠结WEB快速开发究竟是采用PHP,还是采用Python,二者同样是脚本语言,但特点鲜明: PHP: Web专用开发利器,有10多年的经验积累,但其他领域基本不涉及,扩展性不强,企业应用少。 ...

bear256
2013/09/19
5.6K
1
IO基础入门之I/O多路复用技术

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程...

柳哥
2015/01/18
6.9K
1
ZeroMQ实例程序

ZeroMQ(以下简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩...

刘明欢
2014/04/16
4K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部