Java基础通信_Java网络通信基础编程(必看篇)
方式一:同步阻塞方式(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网络通信基础编程(必看篇)相关推荐
- JAVA基础之while 循环(小白必看!!!)
介绍: while 循环是 Java 语言 中比较常用的循环结构之一,先判断循环条件,再执行循环操作语句 . while 是 Java 语言 中的关键字. 循环 条件通常是 具有 boolean 类 ...
- Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)
Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...
- java 中传输文件的代码_java文件上传Demo(必看篇)
说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...
- 一个牛人给Java初学者的建议(必看篇)
给初学者之一:浅谈Java及应用学java 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版 面总体感觉初学者 ...
- 怎么安装python_零基础入门必看篇:浅析python,PyCharm,Anaconda三者之间关系
今天为大家带来的内容是:零基础入门必看篇:浅析python ,PyCharm,Anaconda三者之间关系 众所周知,Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C, ...
- JavaScript基础教程——入门必看篇
JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题. ...
- java 动态编译_老生常谈Java动态编译(必看篇)
一.动态编译简介 new创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类. 一百个类,有一个类错了,都无法编译. 通过动态加载类可以解决该问题 二.代码实例 2.1 OfficeBette ...
- python编程数据处理_python数据处理实战(必看篇)
一.运行环境 1.python版本 2.7.13 博客代码均是这个版本 2.系统环境:win7 64位系统 二.需求 对杂乱文本数据进行处理 部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字 ...
- 新手如何快速入门Python(菜鸟必看篇)
学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如 ...
最新文章
- python pandas 遍历 DataFrame
- text、RC、Parquet、ORC
- spring 获取cookies_springMVC操作cookie和session
- Basic链表与队列的区别
- js 调用另一个类的方法_一个隐藏在方法集和方法调用中且易被忽略的小细节
- HALCON基于形状匹配详解
- 《剑指Offer》 矩形覆盖
- 编程高手之路——闭包函数
- OpenCV自然场景文本检测(附Python代码)
- ios首次加载web_iOS预加载Web页面方案
- R语言处理数据——画图时加大标题
- vc2008调试技巧之输出重定向
- 用Python【批量】生产【电子奖状】的方法请查收!
- 分布式系统面临的问题
- 轻松获奖五一数学建模和蓝桥杯
- STM32单片机初学1-STM32介绍
- 单片机流水单C语言程序,51单片机流水灯C语言源程序
- 顺无盘linux win10包,(2019.10.17)网维大师9.0.6.0无盘7x64-Win10x64公包
- lucas定理 与 扩展lucas定理(HDU 3037 以及 2015 ICL, Finals, Div. 1 J.Ceizenpok’s formula)
- 第13届中国生物特征识别大会即将盛大开幕,中科博宏期待您的到来!
热门文章
- easyui下拉选项多怎么解决_作物根部病害多原因在哪?解决病害生根措施怎么做?...
- 开榨油店的失败教训_开榨油坊风险大吗?该如何投资
- 荆楚理工学院计算机科学专业,荆楚理工学院计算机科学与技术专业2016年在湖北理科高考录取最低分数线...
- 机器学习代码实战——线性回归(单变量)(Linear Regression)
- OSG——- 对点选物体平移(鼠标点选物体、物体随鼠标移动、屏幕坐标转世界坐标)
- [C++11] 智能指针
- 试验笔记 - Eclipse的.class反编译插件
- 淘宝质量属性场景分析
- spring mvc综合easyui点击上面菜单栏中的菜单项问题
- ASP.NET MVC 2 正式版发布了的