`
wakin2003
  • 浏览: 67892 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

网络通讯基础

阅读更多
著名的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等网络协议的函数库。通过这些函数,开发者可以创建...

    网络通讯PPT学习教案.pptx

    《网络通讯基础与S7-200 PLC的应用》 网络通讯在现代工业自动化领域扮演着至关重要的角色,尤其在PLC(可编程逻辑控制器)系统中,有效的通讯能力是实现设备间信息交换的关键。本教程以Siemens的S7-200系列PLC为例...

    网络通讯测试小工具

    此外,usr-tcp232-test还支持多种网络通讯协议,包括但不限于TCP、UDP等基础协议,以及一些特定的应用层协议。例如,HTTP、FTP、SMTP等,这些协议在日常网络应用中广泛使用。通过这个工具,你可以模拟不同的网络环境...

    C# 网络通讯类库可以直接使用

    在IT行业中,网络通讯是构建分布式系统和互联网应用的基础,而C#作为.NET框架的主要编程语言,提供了丰富的库和工具来支持网络通信。本篇将详细介绍一个基于C#的网络通讯类库,以及如何直接使用它进行开发。 首先,...

    TCP网络通讯传送文件

    在IT领域,TCP(传输控制协议)是一种广泛用于网络通讯的基础协议,特别是在文件传输中扮演着重要角色。TCP提供了一种可靠的数据传输服务,确保数据的完整性和有序性,是互联网上众多应用如HTTP、FTP等的基础。下面...

    网络通讯协议关系图高清

    在IT领域,网络通讯协议是实现设备间通信的基础。这些协议定义了数据传输的规则、格式和标准,确保网络上的信息能准确、高效地流动。本资料包主要围绕"网络通讯协议关系图高清"这一主题,包含了一份TCP/IP协议关系图...

    ASP.NET基于网络的虚拟实验平台-VLP2P通信库的设计与实现(源代码+毕设).zip

    针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...

    LABVIEW 网络通讯例程

    在IT领域,网络通讯是至关...综上所述,"LABVIEW网络通讯例程"涵盖了网络通信的基础概念、LabVIEW中的实现方法以及关键的网络编程技术。通过深入学习和实践,开发者能够熟练运用LabVIEW进行高效、稳定的网络应用开发。

    网络编程基础+网络通讯编程

    在这个主题下,我们将深入探讨网络编程的基础,特别是网络通信和网络通讯编程,同时也会触及到TCP/IP协议这一核心概念。 首先,网络编程是编写能够通过网络发送和接收数据的程序的过程。这包括客户端和服务器端的...

    串口及网络通讯调试工具

    串口及网络通讯调试工具是IT领域中一种用于测试和诊断通信协议的实用程序,它涵盖了串行通信和网络通信的基础知识。串口通信,通常指的是RS232标准,是一种广泛应用于各种设备间的传统通信方式,如PC、嵌入式系统和...

    网络通讯支持库1.0下载

    在C++中,网络通讯通常涉及到套接字(socket)编程,这是TCP/IP协议栈的基础。库中的"sock.fne"可能是一个源代码文件或头文件,包含了对套接字操作的封装,例如创建、绑定、监听、连接、发送和接收数据等。在C++中,...

    S7-200 PLC网络通讯.pdf

    总的来说,S7-200 PLC的网络通讯涵盖了从基础设置到高级应用的广泛知识点。理解这些概念,并能够灵活配置通讯参数,对于构建稳定高效的工业自动化网络至关重要。通过STEP7-Micro/WIN软件和S7-200 PLC提供的功能,...

    网络通讯软件(包含源程序)

    首先,这个项目的核心是使用C++编写网络通讯软件,这要求开发者对C++的基础语法、类和对象、内存管理有深入理解。C++的面向对象特性使得它可以构建模块化的网络通信架构,提高代码的可读性和维护性。 其次,项目中...

    STEP7_MPI通讯编程教材

    ### MPI网络通讯基础 MPI(多点接口)是西门子PLC中一种常见的通讯协议,主要用于S7系列PLC之间的数据交换。它能够支持多个设备在同一网络上进行通讯,每个设备具有唯一的地址。MPI网络的传输速率通常为187.5kbps至...

    网络通讯协议编程

    ### 网络通讯协议编程相关知识点 #### 网络通信编程协议及其实例 在探讨网络通信编程协议之前,我们先回顾一下历史。早期的计算机网络技术中,网络编程被视为高级程序员的专属领域,只有少数人能够享受到网络带来...

    [计算机毕设]基于asp.net的基于网络的虚拟实验平台-VLP2P通信库系统设计与实现(源代码+项目报告).zip

    针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...

    基于ASP.NET的基于网络的虚拟实验平台-VLP2P通信库系统设计与实现毕业设计(源代码+项目报告)

    针对虚拟实验台系统的实际功能,采用P2P技术作为其网络通讯基础具有很大的优势:降低服务器资源占用,提高通讯传输效率。但由于NAT的广泛使用,使得不同的内网间系统通讯比较困难。希望P2P通讯具有实用价值,穿透NAT...

    Java网络通讯代码

    Java网络通讯代码是Java编程领域中的一个重要主题,它涉及到如何通过网络在不同的计算机之间交换数据。这个主题涵盖了许多核心技术,包括套接字编程、HTTP协议、TCP/IP通信以及多线程等。对于初学者来说,理解和掌握...

Global site tag (gtag.js) - Google Analytics