服务器就是网路上开放一个端口用来等待客户端连接,并在连接之后能够按照一定的协议与客户端进行单工或者双工的通信的电脑。所以要构建一个简单的服务器就需要开放一定的端口,并且要让客户端知道服务器的IP以及开放的端口的类型号。
在构建服务器时,用到了一个新的类来创建服务器的对象,java.net.ServerSocket,创建的语句大致如下
java.net.ServerSocket server = new java.net.ServerSocket(port);
其中port是一个int类型的值,表示这个服务器对象所开放的端口号。电脑中可用的端口号从0~65535,一个端口同时只能被一个程序所占用,其中前1024个端口称为知名端口,通常都被一些电脑中常用软件所占用。所以在写测试程序时,要尽量避免使用这些知名端口。
由于存在输入的port被占用或者port的值不在可用范围之内的等等不可预知的情况存在,所以这条语句需要强制检测异常,即需要try catch语句或者throws关键字。
在创建对象之后,需要用accept()方法来在有客户端进行连接时获得一个Socket对象作为客户端对象。由于这条语句是在客户端连接服务器时有效,所以在这条语句时会有一个阻塞的效果。由于需要与客户端进行通信,就需要从Socket对象上获得其输入输出流对象(同样需要try catch),getInputStream()和getOutputStream()方法可以实现相关目的。
多线程服务器
以上的简单服务器是单线程的服务器,即同时只能处理一个客户端的信息,其他客户端的连接必须在之前的客户端断开连接之后才能进行,这在实际应用中是绝对不行的。所以采用线程的方法,可以实现服务器能够实现多线程。
try {
ServerSocket server = new ServerSocket(9090);
while (true) {
Socket client = server.accept();
ClientThread clientThread = new ClientThread(client);
clientThread.start();
}
} catch (Exception e) {
e.printStackTrace();
}
public class ClientThread extends Thread {
private Socket client;
public ClientThread(Socket client) {
this.client = client;
}
public void run() {
clientRun();
}
private void clientRun() {
try {
while (true) {
java.io.OutputStream outputStream = client.getOutputStream();
String msg = "hello welcome to server!";
outputStream.write(msg.getBytes());
java.io.InputStream inputStream = client.getInputStream();
String print = "";
while (print != "bye") {
print = readLine(inputStream);
System.out.println(print);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String readLine(java.io.InputStream inputStream) {
String print = null;
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
try {
print = bufferedReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return print;
}
}
以上就是多线程的简单服务器的实现。其中用到了一种新的输入流对象,bufferedReader,用来读取字符串。
字符串的读取
bufferedReader也是一种过滤流,这次主要用到的是bufferedReader中的readline()方法,readline是从输入流中连续读取字节,直到遇到回车符停止,并将之前读取到的字节转换为字符串,其编码依据平台默认的编码方式。
这实际上就是Java自身对之前使用的单个字节读取字符串的方法的一个封装实现。
分享到:
相关推荐
串口通信项目总结 本篇资源的主要内容是对多串口接收项目的总结,涵盖技术总结和心得总结两方面。下面将对标题、描述、标签和部分内容进行详细的解释和总结。 一、技术总结 技术总结是对整个项目的技术实现过程的...
在IT领域,网络通信是至关重要的部分,而TCP(传输控制协议)作为其核心协议之一,为应用程序提供了可靠的、基于连接的数据通信服务。本实验“TCP异步通信试验”聚焦于利用MFC(Microsoft Foundation Classes)框架...
3. **电力系统通信网**:作为国家专用通信网络之一,它是电力系统不可或缺的一部分,支撑着电网调度自动化、运行市场化和管理信息化。该网络对于保障电网的安全、稳定运行至关重要。 4. **模拟信号**:信号的参量...
调制解调技术是移动通信的关键技术之一,包括最小移频键控(MSK)、高斯滤波最小移频键控(GMSK)、差分四相移相键控(DQPSK)和正交振幅调制(QAM)等。这些调制方式各有优缺点,如GMSK通过预调制滤波器改善了功率...
### 光纤通信总结 #### 一、光纤通信概述 光纤通信是一种先进的通信技术,它利用光纤作为传输介质,通过光波携带信息进行数据传输。相比于传统的金属导线,光纤通信具有诸多优势,如传输距离远、抗干扰能力强等。 ...
总之,服务通信是Android开发中的核心技能之一,理解并熟练运用上述知识点对于构建高效、稳定的后台服务至关重要。通过实际项目的实践和代码分析,开发者可以更深入地了解服务通信的原理和实现,从而提高应用的质量...
一级建造师之一建通信与广电工程实务考试易错知识点总结.pdf
### VC串口通信总结 #### 一、串口通信概述 串口通信是计算机与外部设备之间进行数据交换的一种常见方式。随着技术的发展,虽然USB和以太网等其他通信方式逐渐普及,但在某些特定场景下,特别是工业控制领域,串口...
在工业自动化领域,西门子S7系列PLC(可编程逻辑控制器)是广泛应用的控制器之一,其中S7-1200和S7-300/400是两个不同级别的产品线,分别适合不同的应用场合。这篇文章将详细讨论S7-1200与S7-300/400之间的通信测试...
首先,文件管理是通信资料员的核心工作之一。在过去的一年里,我负责了从桩基到立柱各个施工阶段的原始资料的收集、整理和归档。我确保了所有信息的准确性和及时性,在规定的时间内完成了与相关部门的交接工作。这...
二是关注具备长期成长潜力的5G应用领域,如物联网、车联网和高清视频等,相关的代表性企业如美格智能、威胜信息、移远通信、广和通等也在报告推荐之列。 6. 风险提示 报告还对潜在风险进行了提醒,包括中美贸易摩擦...
在通信行业飞速发展的今天,每一位通信专业学生都渴望有机会亲身踏入这个充满高科技和创新活力的领域。实习,作为连接学校和社会的桥梁,为学生们提供了宝贵的实践机会。我有幸在易讯科技股份有限公司完成了我的通信...
### 串行通信总结 #### 一、串行通信技术概述 ##### 1.1 概念 串行通信作为一种常见的数据传输方式,在现代通信领域扮演着重要角色。相较于并行通信,串行通信通过单一的数据线进行数据的逐位传输,每位数据占据...
应立即在两用户之间建立通信电路的连接,这时通信网内的相关设备和线路都被这一对用户占用着, 不能再为其他用户服务,这种在一次呼叫中由通信网根据用户要求在指定的呼叫路由上固定分配设备的交换方式,称之为电路...
数据位的编码是RS232通信中的核心概念之一。当发送器准备发送数据时,它会先发送一个起始位,该位为逻辑“0”,表示数据传输的开始。接着,数据位按顺序发送,每个数据位对应于一个比特的信息。最后,发送停止位,其...
"几种通信总线详尽总结" 本文将对嵌入式系统设计的串行总线、驱动器和物理接口进行详细介绍,并为总线最优选择提供指导和性能比对。 1. 串行总线的优点 ...选择合适的通信总线是嵌入式系统设计的关键之一。
例如,Walsh码是一种常用于扩频通信的理想码型之一。 #### Walsh码 - **产生方法**:通过Hadamard矩阵来生成。 - **相关特性**: - 同步时,具有理想的相关特性; - 异步时,互相关最大值约为自相关最大值。 - *...
GSM是一种数字移动电话系统标准,由欧洲电信标准协会制定,是目前全球最流行的移动通信标准之一。 8. BSC(Base Station Controller,基站控制器) BSC是无线通信网络中的一个控制组件,它负责控制基站(BTS)并...
它确保了网络和设备的稳定运行,是通信维护工作最重要的目标之一。 线路维护与应急处理的措施,体现了公司对于突发情况的应对能力和预案的完善。通过灵活应对市政建设等外部影响,及时采取措施,不仅保障了线路安全...
比如,在同步时钟的研发中,我了解到设计一个产品需要考虑的因素非常之多,从选材、电路设计、抗干扰能力到产品的人机交互界面,每一个环节都对最终产品的性能产生重要影响。这些实践经验对于我这样一个初出茅庐的...