1进程间的通信

(1)本地的通信方式:
消息传递:管道、FIFO、消息队列。
同步:互斥量、条件变量、读写锁、文件和写记录锁、信号量。
共享内存:匿名的和具名的。
远程过程调用:Solaris门和Sun RPC。
(2)系统调用机制:系统调用机制是应用程序和操作系统之间传递控制权。
(3)应用程序如果需要使用系统的服务,需要将控制权从应用程序传递给系统调用接口,系统调用接口将控制权传递给操作系统,操作系统根据系统的调用函数去选择相应的操作系统服务,然后将控制权返回给应用程序,这样应用程序就可能使用操作系统的服务。

这里写图片描述
(4)思考:系统知道应用进程需要什么样的服务,但是系统如何知道是那个应用请求这个服务呢?

2socket是什么以及在通信的作用

1 那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。
2 网络五层模型:
应用层:http
传输层:tcp/ip。segment(数据段)
网络层:packet(数据包)
链路层:frame(数据帧)
物理层:比特
这里写图片描述
在套接字以上的控制权受应用程序的控制,在套接字以下的协议则受操作系统控制的。因此只要应用程序使用TCP/IP协议进行通信,就必须通过套接字与操作系统进行交互。
(3)从操作系统层面理解socket作用
套接字是为了获得网络通信服务而与操作系统进行交互时使用的一种机制。当某个应用进程进行想使用网络进行通信时,首先需要发出socket系统调用,请求操作系统为其创造一个socket套接字。这个调用实际上是操作系统去准备应用进程所需要的一些系统资源(存储空间、CPU、网络带宽等)分配给操作系统(进程是系统资源分配的单位)。操作系统将这些资源的总和(叫做套接字描述符)返回给应用进程。此后应用进程只要需要进行网络通信(建立连接、收发数据、调整网络通信参数等)都必须使用这个套接字描述符。在处理系统调用的时候,通过套接字描述符,操作系统就可以识别出应该准备那些资源来完成应用进程所请求的服务。通信完毕后,应用进程关闭套接字,系统会回收所有分配给应用进程的资源。

3socket通信实例

客户端代码
 * 创建Socket对象,指明需要连接的服务器的地址和端口号
 * 连接建立后,通过输出流想服务器端发送请求信息   
 * 通过输入流获取服务器响应的信息
 * 关闭响应资源
 * author dan.wang
public class Recv {
    public static void main(String[] args) throws Exception {
        // 客户端
        // 1、创建客户端Socket,指定服务器地址和端口
        Socket socket = new Socket("localhost", 10086);
        // 2、获取输出流,向服务器端发送信息
        OutputStream os = socket.getOutputStream();// 字节输出流
        PrintWriter pw = new PrintWriter(os);// 将输出流包装成打印流
        pw.write("用户名:admin;密码:123");
        pw.write("用户名:123;密码:123");
        pw.flush();
        socket.shutdownOutput();
        // 3、获取输入流,并读取服务器端的响应信息
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("我是客户端,服务器说:" + info);
        // 4、关闭资源
        br.close();
        is.close();
        pw.close();
        os.close();
        socket.close();
服务器端代码
 * 创建ServerSocket对象,
 * 绑定监听端口,通过accept()方法监听客户端请求
 * 连接建立后,通过输入流读取客户端发送的请求信息
 * 通过输出流向客户端发送乡音信息 
 * 关闭相关资源
 * @author dan.wang
public class Send {
    public static void main(String[] args) throws Exception {
         * 基于TCP协议的Socket通信,实现用户登录,服务端
        // 1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
        ServerSocket serverSocket = new ServerSocket(10086);// 1024-65535的某个端口
        // 2、调用accept()方法开始监听,等待客户端的连接
        Socket socket = serverSocket.accept();
        // 3、获取输入流,并读取客户端信息
        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("我是服务器,客户端说:" + info);
        socket.shutdownInput();// 关闭输入流
        // 4、获取输出流,响应客户端的请求
        OutputStream os = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(os);
        pw.write("欢迎您!");
        pw.flush();
        // 5、关闭资源
        pw.close();
        os.close();
        br.close();
        isr.close();
        is.close();
        socket.close();
        serverSocket.close();

参考博客地址:
http://blog.csdn.net/jiajia4336/article/details/8798421
http://www.cnblogs.com/rocomp/p/4790340.html
参考书籍:计算机网络-谢希仁第五版

1进程间的通信2socket是什么以及在通信的作用3socket通信实例1进程间的通信(1)本地的通信方式: 消息传递:管道、FIFO、消息队列。 同步:互斥量、条件变量、读写锁、文件和写记录锁、信号量。 共享内存:匿名的和具名的。 远程过程调用:Solaris门和Sun RPC。 (2)系统调用机制:系统调用机制是应用程序和操作系统之间传递控制权。 (3)
上一篇文章中介绍了C语言的Socket编程,其主要目的是说明Socket实现是基于网络层IP协议和传输层TCP协议或UDP协议的,网络层、传输层的协议又是操作系统来实现的,所以在C语言中不同操作系统对应着不同的函数库调用,而Java语言具有平台无关性,也就是说不会因操作系统不同而依赖不同的类库,这篇文章将介绍基本的Socket编程Java层面的实现原理。 一、Java语言Socket编程
我们在日常上网时,会经常登录某个网址,发送我们的请求信息,然后从该网站得到我们想要的信息。这个是怎么实现的呢。其实,我们可以把我们自己当成客户端,网站当成服务端。其实这是个相对的概念,就是谁收到请求,谁就是服务端;谁发送请求,谁就是客户端。而发送和接收请求都是基于Socket 对象实现的。而这个过程是怎么样的呢?(这里介绍的是基于TCP/IP 的通信) 下面我先用一个简单的图解表示一下: 通过上面的图解,我们可以很清晰的看到整个通信的流程。 对于编码来实现的话,我们首先需要编写服务端,然后再编写客户端。 Socket原理 1、什么是Socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。   socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭cl
Java Socket编程—-通信是这样炼成的Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。 Socket编程 一、网络基础知识(参考计算机网络) 关于计算机网络部分可以参考相
三,socket通信 1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用流和socket进行远程通讯 2.最简单的socket是一个服务端对应一个客户端  server的写法 ServerSocket server = new ServerSoc
public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8888); } catch (IOException e) { System.err.println("Could not listen on port: 8888."); System.exit(1); Socket clientSocket = null; try { System.out.println("Waiting for connection..."); clientSocket = serverSocket.accept(); System.out.println("Connection established with " + clientSocket.getInetAddress().getHostName()); } catch (IOException e) { System.err.println("Accept failed."); System.exit(1); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Received message: " + inputLine); out.println("Server received message: " + inputLine); out.close(); in.close(); clientSocket.close(); serverSocket.close(); 客户端代码: ```java import java.net.*; import java.io.*; public class Client { public static void main(String[] args) throws IOException { Socket socket = null; PrintWriter out = null; BufferedReader in = null; try { socket = new Socket("localhost", 8888); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Unknown host: localhost"); System.exit(1); } catch (IOException e) { System.err.println("Could not connect to localhost."); System.exit(1); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("Server response: " + in.readLine()); out.close(); in.close(); stdIn.close(); socket.close(); 这个模板实现了一个简单的回显服务器,当客户端连接到服务器并发送消息时,服务器会将消息回显给客户端。