我相对来说是编程新手,正在尝试自学socket编程。据我了解,如果一个进程(比如服务器进程)需要通过网络与另一个进程(比如客户端进程)通信,则两端都需要一个socket。
如果我的服务器和客户端进程在同一台机器上,那么为什么我需要sockets呢?因为流或数据报没有经过网络,它们在同一台机器上。请问有人可以澄清这个原因吗?
我相对来说是编程新手,正在尝试自学socket编程。据我了解,如果一个进程(比如服务器进程)需要通过网络与另一个进程(比如客户端进程)通信,则两端都需要一个socket。
如果我的服务器和客户端进程在同一台机器上,那么为什么我需要sockets呢?因为流或数据报没有经过网络,它们在同一台机器上。请问有人可以澄清这个原因吗?
那么,如果不使用套接字,同一台计算机上的两个进程如何进行通信?
...
没错,套接字是两个进程进行通信的一种方式,无论是在网络上还是在同一台计算机上。你可以发明其他机制来实现同一台计算机内部的通信(而且有很多种),但是如果套接字已经完美地实现了该目的,为什么要这样做呢?
如果你确定它们永远会在同一台机器上,那么就不需要使用 sockets。
在同一台机器上的进程之间有其他数据共享机制,例如通过文件共享。但是,sockets提供了一个抽象层,使用户无论是在同一台机器上还是在不同的机器上都能够透明地使用,因此如果你可能需要在不同的机器上使用,sockets是一个很好的选择。
你使用的是什么操作系统?如果是Windows,则可以使用以下这些进行进程间通信:
在继续之前,请告诉我们您的操作系统,我们可以为您提供有关进程间通信的一些提示。
The server instantiates a ServerSocket object, denoting which port number communication is to occur on.
The server invokes the accept() method of the ServerSocket class. This method waits until a client connects to the server on the given port.
After the server is waiting, a client instantiates a Socket object, specifying the server name and port number to connect to.
The constructor of the Socket class attempts to connect the client to the specified server and port number. If communication is established, the client now has a Socket object capable of communicating with the server.
On the server side, the accept() method returns a reference to a new socket on the server that is connected to the client's socket.
连接建立后,可以使用I/O流进行通信。每个套接字都有一个输出流和一个输入流。客户端的输出流连接到服务器的输入流,客户端的输入流连接到服务器的输出流。
TCP是一种双向通信协议,因此数据可以同时通过两个流发送。以下是提供完整方法集以实现套接字的有用类。
在不同进程之间进行通信有几种方法,其中之一是使用套接字。
像往常一样,这里存在权衡取舍。
有更快、资源消耗较少的方式来进行IPC。其中一些会增加额外的代码复杂性,如果使用不当,可能会给您的应用程序带来潜在的错误。
套接字的主要好处是它们是透明的。如果您稍后决定要在不同的机器上运行一个或多个进程,您不必更改代码。