方式一:同步阻塞方式(BIO):

服务器端(Server):

package com.ietree.basicskill.socket.mode1;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

/**

* 服务端

*/

public class Server {

// 端口号

final static int PORT = 8765;

public static void main(String[] args) {

ServerSocket server = null;

try {

server = new ServerSocket(PORT);

System.out.println("Server start......");

// 进行阻塞

Socket socket = server.accept();

// 创建一个程序执行客户端的任务

new Thread(new ServerHandler(socket)).start();

} catch (IOException e) {

e.printStackTrace();

} finally {

if(server != null){

try {

server.close();

} catch (IOException e) {

e.printStackTrace();

}

}

server = null;

}

}

}

采用多线程来处理接收到的请求(ServerHandler):

package com.ietree.basicskill.socket.mode1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class ServerHandler implements Runnable {

private Socket socket;

public ServerHandler(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

BufferedReader in = null;

PrintWriter out = null;

try {

in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));

out = new PrintWriter(this.socket.getOutputStream(), true);

String body = null;

while (true) {

body = in.readLine();

if(body == null){

break;

}

System.out.println("Server: " + body);

out.println("服务器端回送响应的数据。");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if(in != null){

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(out != null){

try {

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

if(socket != null){

try {

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

socket = null;

}

}

}

客户端(Client):

package com.ietree.basicskill.socket.mode1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

/**

* 客户端

*/

public class Client {

final static String ADDRESS = "127.0.0.1";

final static int PORT = 8765;

public static void main(String[] args) {

Socket socket = null;

BufferedReader in = null;

PrintWriter out = null;

try {

socket = new Socket(ADDRESS, PORT);

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(), true);

// 向服务器端发送数据

out.println("接收到客户端的请求数据......");

String response = in.readLine();

System.out.println("Client: " + response);

} catch (Exception e) {

e.printStackTrace();

} finally {

if(in != null){

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(out != null){

try {

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

if(socket != null){

try {

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

socket = null;

}

}

}

程序输出:

Server:

Server start......

Server: 接收到客户端的请求数据......

Client:

Client: 服务器端回送响应的数据。

同步非阻塞(NIO)

异步非阻塞(AIO)

以上这篇Java网络通信基础编程(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。

Java基础通信_Java网络通信基础编程(必看篇)相关推荐

  1. JAVA基础之while 循环(小白必看!!!)

    介绍: while 循环是 Java 语言 中比较常用的循环结构之一,先判断循环条件,再执行循环操作语句 . while 是 Java 语言 中的关键字.  循环 条件通常是 具有 boolean 类 ...

  2. Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)

    Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...

  3. java 中传输文件的代码_java文件上传Demo(必看篇)

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...

  4. 一个牛人给Java初学者的建议(必看篇)

    给初学者之一:浅谈Java及应用学java 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版 面总体感觉初学者 ...

  5. 怎么安装python_零基础入门必看篇:浅析python,PyCharm,Anaconda三者之间关系

    今天为大家带来的内容是:零基础入门必看篇:浅析python ,PyCharm,Anaconda三者之间关系 众所周知,Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C, ...

  6. JavaScript基础教程——入门必看篇

    JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题. ...

  7. java 动态编译_老生常谈Java动态编译(必看篇)

    一.动态编译简介 new创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类. 一百个类,有一个类错了,都无法编译. 通过动态加载类可以解决该问题 二.代码实例 2.1 OfficeBette ...

  8. python编程数据处理_python数据处理实战(必看篇)

    一.运行环境 1.python版本 2.7.13 博客代码均是这个版本 2.系统环境:win7 64位系统 二.需求 对杂乱文本数据进行处理 部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字 ...

  9. 新手如何快速入门Python(菜鸟必看篇)

    学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如 ...

最新文章

  1. python pandas 遍历 DataFrame
  2. text、RC、Parquet、ORC
  3. spring 获取cookies_springMVC操作cookie和session
  4. Basic链表与队列的区别
  5. js 调用另一个类的方法_一个隐藏在方法集和方法调用中且易被忽略的小细节
  6. HALCON基于形状匹配详解
  7. 《剑指Offer》 矩形覆盖
  8. 编程高手之路——闭包函数
  9. OpenCV自然场景文本检测(附Python代码)
  10. ios首次加载web_iOS预加载Web页面方案
  11. R语言处理数据——画图时加大标题
  12. vc2008调试技巧之输出重定向
  13. 用Python【批量】生产【电子奖状】的方法请查收!
  14. 分布式系统面临的问题
  15. 轻松获奖五一数学建模和蓝桥杯
  16. STM32单片机初学1-STM32介绍
  17. 单片机流水单C语言程序,51单片机流水灯C语言源程序
  18. 顺无盘linux win10包,(2019.10.17)网维大师9.0.6.0无盘7x64-Win10x64公包
  19. lucas定理 与 扩展lucas定理(HDU 3037 以及 2015 ICL, Finals, Div. 1 J.Ceizenpok’s formula)
  20. 第13届中国生物特征识别大会即将盛大开幕,中科博宏期待您的到来!

热门文章

  1. easyui下拉选项多怎么解决_作物根部病害多原因在哪?解决病害生根措施怎么做?...
  2. 开榨油店的失败教训_开榨油坊风险大吗?该如何投资
  3. 荆楚理工学院计算机科学专业,荆楚理工学院计算机科学与技术专业2016年在湖北理科高考录取最低分数线...
  4. 机器学习代码实战——线性回归(单变量)(Linear Regression)
  5. OSG——- 对点选物体平移(鼠标点选物体、物体随鼠标移动、屏幕坐标转世界坐标)
  6. [C++11] 智能指针
  7. 试验笔记 - Eclipse的.class反编译插件
  8. 淘宝质量属性场景分析
  9. spring mvc综合easyui点击上面菜单栏中的菜单项问题
  10. ASP.NET MVC 2 正式版发布了的