初识网络进程通信<Heart.X.Raid>
可以这样说:我们在网络上只做一件事,利用各种软件没完没了的相互通信。
对于单机系统而言,进程在系统中有自己唯一的进程号。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。而且 操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。
为此,TCP/IP协议为网间进程通信问题建立了IP地址,端口,Socket(套接字)等概念。
(1) IP地址
IP地址是连入网络中的机器的唯一识别地址。信息可以根据IP选择路由方向,从而找到目的地机器。这就像 邮递员(路由器)根据你们家房子(目的机器)的地址(IP地址)递送包裹(信息) 。
(2) 端口
我们知道,一台拥有IP地址的主机可以提供许多服 务,比如web服务、FTP服务、SMTP服务等。对于不同的服务请求,主机需要调用不同的程序进行处理。可是主机怎么知道是什么服务请求那?显然仅仅知道IP地址是不够的,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。
端口实质上是抽象的软件结构(不要理解成机器上的USB插槽),它包括一些数据结构和I/O(基本输入输出)缓冲区。系统会为这些数据结构和缓冲区指定一个唯一的端口号。不同的端口号对应提供不同服务的程序。比如80号端口是HTTP端口,当要申请主机的HTTP服务时,我们将申请信息发送到指定IP的80号端口的数据结构内。这时主机会监听到80号端口有服务请求,自动调用HTTP服务进程进行服务。
如果说IP地址是你家房子的地址,那么端口就是你家的门(这个房子确实门多了点)。不同的访客走不同的门,行贿的家伙一定要走后门(不排除小偷翻窗户的可能) 。当你听到后门有人敲门的时候,嘿嘿......
(3) Socket 套接字
有的时候,多个应用程序可能同时需要向同一个接口发送数据 。为了区别不同的应用程序进程和连接 ,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意 是 “插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动 建立关系。此后,应用程序送给Socket的数据,由Socket交网络驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定IP地址和端 口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到得数据,网络应用程序就是这样通过Socket进行数据的 发送与接收的。
了解了基于TCP/IP协议的网间进程通信的部分概念之后,现在我想写一个Java版的C-S通信程序。既然应用程序需要通过"套接字"向网络发出请求或者应答网络请求。我们自然要为客户端和服务器端的程序创建自己的Socket。
还好,JDK中就有我们想要的东西——Socket和ServerSocket类。简单介绍一下这两个类:
Socket类用于客户端,为建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
ServerSocket类用于服务器端,他可以创建绑定到特定端口的服务器套接字。当监听到端口内容时,他将创建一个用于链接的Socket对象。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是 ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
//客户端程序,用于向服务器端发送一句“hello server!”
import java.net.*;
import java.io.*;
public class Client{
private String ipTo="172.16.129.13";//服务器端IP地址
private int port=8189;//需要通过的服务器端口号 public void hello(){
try{
//创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket clientSocket=new Socket(ipTo,port);
try{
System.out.println("success connection....");
//返回此套接字的输出流
OutputStream os=clientSocket.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
pw.println("hello server!");
}
finally{
clientSocket.close();
}
}catch(IOException e){
e.printStackTrace();
}
} public static void main(String[] args)
{
Client client=new Client();
client.hello();
}
}
//服务器端程序,用于接受客户端的信息
import java.net.*;
import java.io.*;
public class Server{
private int lisenerPort=8189;//监听端口 private void lisener(){
try{
//创建服务器端套接字,用于绑定指定端口
ServerSocket serverSocket=new ServerSocket(lisenerPort);
//监听绑定的端口,用于产生阻塞,直到接受到一个来自客户端的有效连接,并且返回一个客户端的Socket对象实例。
Socket socket=serverSocket.accept();
try{
//创建套接字输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//服务器端显示来自客户端的问候
System.out.println(br.readLine());
}
finally{
serverSocket.close();
}
}catch(IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Server server=new Server();
server.lisener();
} }
初识网络进程通信<Heart.X.Raid>的更多相关文章
- 操作系统-进程通信(信号量、匿名管道、命名管道、Socket)
进程通信(信号量.匿名管道.命名管道.Socket) 具体的概念就没必要说了,参考以下链接. 信号量 匿名管道 命名管道 Socket Source Code: 1. 信号量(生产者消费者问题) #i ...
- [转]WINDOW进程通信的几种方式
windows进程通信的几种方式 1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/O操作,只需简单的指针 ...
- C#中使用命名管道进行进程通信的实例
原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用 ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- Socket进程通信机制及应用
Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或者应答网络请求.Socket即不是一个程序,也不是一个协议,其只是操作系统提供的通信层的一 ...
- python 守护进程、同步锁、信号量、事件、进程通信Queue
一.守护进程 1.主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes ...
- Socket进程通信机制
1.Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄. 2.应用程序通过套接字向网络发出请求或者应答网络请求. 3.Socket既不是一个程序,也不是一种协议,其只是操作系统 ...
- Linux间的进程通信;以及子进程的创建
"-----第六天-----------------------------------------------------------------------------" .版 ...
- Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)
不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket ...
随机推荐
- 【翻译】checkbox的第三种状态
checkbox只有两种值:选中(checked)或未选中(unchecked).它可以有任何值,但是表单提交时checkbox的值只能是checked或unchecked.它的默认值是uncheck ...
- Windows上Nginx的安装教程详解
一 背景 为了方便本地的开发和验证,于是整理了这一篇Windows上安装Nginx的博文,建议一般学习还是使用Linux,一般正规公司都是在Linux上安装Nginx服务! 本篇内容相对比较简单,如果 ...
- 初识MYSQL2
mysql的配置 MySql默认的端口号是3306 默认字符集的设置 在mysql的安装目录,会看到my.ini文件! my.ini文件介绍 01.default-character-set=utf8 ...
- 简单的Python 火车抢票程序
当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚 ...
- 【HDU 3590】 PP and QQ (博弈-Anti-SG游戏,SJ定理,树上删边游戏)
PP and QQ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Nginx增加模块
http://blog.csdn.net/loyachen/article/details/50902667
- SGU 275. To xor or not to xor (高斯消元法)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=275 题意:给你n个数,可以选择任意个数异或,但是要使得最后的异或值最大. 我们把每 ...
- sigmod2017.org
http://sigmod2017.org/sigmod-program/#ssession20
- 一些 Google 搜索词
(1) flex blazeds java; (2) flex 动画 || flex animation || flex spark glow animation (3) flex glow效果 ...
- 【转】iPhone易被窃听应用三分钟即可获取所有信息
2011年8月9日10:19 “你有iPhone吗?这下你麻烦了!”昨天香港<东方日报>封面文章用这样的语气报道说,一种iPhone等智能手机窃听程序,正引爆香港. 该报记者亲自试验,发现 ...