著名的OSI(Open System Interconnection,开放系统互联)七层模型定义了网络通信基础。
物理层:有关传输介质的特性标准。
数据链路层:定义单个链路上如何传输数据,如ATM,FDDI。
网络层: 定义端到端的包传输,所有节点的逻辑地址,路由实现的方式和学习的方式。如何 分包。IP,IPX.
传输层: 差错恢复协议或无差错恢复协议,同一主机上数据流输入复用,重新排序收到的数据包。TCP,UDP,SPX.
会话层:定义如何开始,控制和结束一个对话。RPC,SQL等。
表示层:定义数据格式及加密。
应用层:与其他计算机进行通信的应用,Telnet,HTTP,FTP,NFS,SMTP.
Java 从传输层开始向程序员提供编程接口。
TCP基础
TCP协议下的Socket称为有连接的Socket。
这种模式下的Socket必须在发送数据之前与目的地的Socket取得一个连接。建立后可以使用一个数据流接口,按照"打开-读-写-关闭"的顺序操作。
服务器端:
分配端口,端口总共有0-65535个。前1024已经被TCP/IP保留。
常用的API
ServerSocket,Socket。
最常用的3个方法:
ServerSocket.accept(); //产生“阻塞”
Socket.getInputStream(); //获得网络输入“管道”
Socket.getOutputStream(); //获得网络输出“管道”
例子:
简单的多线程TCP服务器。
mport java.net.ServerSocket;
import java.net.Socket;
/**
* 主程序监听指定端口的连接请求,如果接入一个客户端,则启动一个EchoServer子线程。
* @author wakin
*
*/
public class MainEchoServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
ServerSocket sercerSocket = new ServerSocket(9999);
System.out.println("EchoServer在9999端口上监听...");
while(true) {
Socket socket = sercerSocket.accept();
System.out.println("建立一个新的连接...");
new EchoServer(socket).start(); //启动线程的第一种方法(见API文档),调用线程的run方法。
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Calendar;
public class EchoServer extends Thread{
private Socket socket =null;
public EchoServer(Socket s){
this.socket = s;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
Calendar c = Calendar.getInstance();
String msg = null;
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
do {
msg = null;
msg = in.readLine();
if(msg == null){
System.out.println("通讯终止...");
break;
}
msg = msg.toUpperCase();
System.out.println("收到命令:"+msg);
if(msg.equals("DOW")){
switch(c.get(Calendar.DAY_OF_WEEK)){
case Calendar.SUNDAY : out.println("今天是SUNDAY");
break;
case Calendar.MONDAY : out.println("今天是MONDAY");
break;
case Calendar.TUESDAY: out.println("今天是TUESDAY");
break;
case Calendar.WEDNESDAY: out.println("今天是WEDNESDAY");
break;
case Calendar.THURSDAY: out.println("今天是THURSDAY");
break;
case Calendar.FRIDAY : out.println("今天是FRIDAY");
break;
case Calendar.SATURDAY: out.println("今天是SATURDAY");
break;
}
}
else if(msg.equals("DOY")){
out.println("今天是一年的第 "+c.get(Calendar.DAY_OF_YEAR)+"天");
}
else if(msg.startsWith("FREE")){
out.println("答复:"+msg.substring(5));
}
else if(msg!=null) {
out.println("无效的命令!");
}
} while (true);
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
System.out.println("关闭一个连接...");
if(in!=null)
in.close();
if(out!=null)
out.close();
if(this.socket!=null)
this.socket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class EchoClient {
public static void main(String [] args) {
Socket socket = null;
BufferedReader in = null;
BufferedReader clientIn = null;
PrintWriter out = null;
try {
String msg = null;
socket = new Socket("localhost",9999);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
clientIn = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
while(true) {
msg = clientIn.readLine();
if(msg==null){
break;
}
else {
out.println(msg);
System.out.println(in.readLine());
}
}
System.out.println("关闭通讯...");
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(in!=null)
in.close();
if(out!=null)
out.close();
if(socket!=null)
socket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
分享到:
相关推荐
此课件是针对《网络通讯基础》的,让我们认识到网络通讯的结构。大致内容:1.介绍计算机网络的成长过程、发展趋势及其所起到的重要作用2.理解OSI网络通讯协议3.理解TCP/IP协议4.了解OSI网络通讯协议与TCP/IP协议的...
### 网络通讯基础 网络通讯是现代软件开发中不可或缺的一部分,涉及到数据在网络中的传输、接收与处理。在易语言中,实现网络通讯主要依赖于其提供的TCP/IP、UDP等网络协议的函数库。通过这些函数,开发者可以创建...
《网络通讯基础与S7-200 PLC的应用》 网络通讯在现代工业自动化领域扮演着至关重要的角色,尤其在PLC(可编程逻辑控制器)系统中,有效的通讯能力是实现设备间信息交换的关键。本教程以Siemens的S7-200系列PLC为例...
此外,usr-tcp232-test还支持多种网络通讯协议,包括但不限于TCP、UDP等基础协议,以及一些特定的应用层协议。例如,HTTP、FTP、SMTP等,这些协议在日常网络应用中广泛使用。通过这个工具,你可以模拟不同的网络环境...
在IT行业中,网络通讯是构建分布式系统和互联网应用的基础,而C#作为.NET框架的主要编程语言,提供了丰富的库和工具来支持网络通信。本篇将详细介绍一个基于C#的网络通讯类库,以及如何直接使用它进行开发。 首先,...
在IT领域,TCP(传输控制协议)是一种广泛用于网络通讯的基础协议,特别是在文件传输中扮演着重要角色。TCP提供了一种可靠的数据传输服务,确保数据的完整性和有序性,是互联网上众多应用如HTTP、FTP等的基础。下面...
在IT领域,网络通讯协议是实现设备间通信的基础。这些协议定义了数据传输的规则、格式和标准,确保网络上的信息能准确、高效地流动。本资料包主要围绕"网络通讯协议关系图高清"这一主题,包含了一份TCP/IP协议关系图...
针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...
在IT领域,网络通讯是至关...综上所述,"LABVIEW网络通讯例程"涵盖了网络通信的基础概念、LabVIEW中的实现方法以及关键的网络编程技术。通过深入学习和实践,开发者能够熟练运用LabVIEW进行高效、稳定的网络应用开发。
在这个主题下,我们将深入探讨网络编程的基础,特别是网络通信和网络通讯编程,同时也会触及到TCP/IP协议这一核心概念。 首先,网络编程是编写能够通过网络发送和接收数据的程序的过程。这包括客户端和服务器端的...
串口及网络通讯调试工具是IT领域中一种用于测试和诊断通信协议的实用程序,它涵盖了串行通信和网络通信的基础知识。串口通信,通常指的是RS232标准,是一种广泛应用于各种设备间的传统通信方式,如PC、嵌入式系统和...
在C++中,网络通讯通常涉及到套接字(socket)编程,这是TCP/IP协议栈的基础。库中的"sock.fne"可能是一个源代码文件或头文件,包含了对套接字操作的封装,例如创建、绑定、监听、连接、发送和接收数据等。在C++中,...
总的来说,S7-200 PLC的网络通讯涵盖了从基础设置到高级应用的广泛知识点。理解这些概念,并能够灵活配置通讯参数,对于构建稳定高效的工业自动化网络至关重要。通过STEP7-Micro/WIN软件和S7-200 PLC提供的功能,...
首先,这个项目的核心是使用C++编写网络通讯软件,这要求开发者对C++的基础语法、类和对象、内存管理有深入理解。C++的面向对象特性使得它可以构建模块化的网络通信架构,提高代码的可读性和维护性。 其次,项目中...
### MPI网络通讯基础 MPI(多点接口)是西门子PLC中一种常见的通讯协议,主要用于S7系列PLC之间的数据交换。它能够支持多个设备在同一网络上进行通讯,每个设备具有唯一的地址。MPI网络的传输速率通常为187.5kbps至...
### 网络通讯协议编程相关知识点 #### 网络通信编程协议及其实例 在探讨网络通信编程协议之前,我们先回顾一下历史。早期的计算机网络技术中,网络编程被视为高级程序员的专属领域,只有少数人能够享受到网络带来...
针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...
针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...
Java网络通讯代码是Java编程领域中的一个重要主题,它涉及到如何通过网络在不同的计算机之间交换数据。这个主题涵盖了许多核心技术,包括套接字编程、HTTP协议、TCP/IP通信以及多线程等。对于初学者来说,理解和掌握...