Java the difference of Socket and ServerSocket in using port

不问归期 提交于 2019-12-01 06:28:41

So from my understanding, can I conclude that, at server side, we can create multiple sockets under one port? (similar to what web server does)

You're confusing yourself with your terminology. ServerSocket.accept() accepts a connection, and wraps the endpoint in a Socket. The endpoint has the same local port number as the ServerSocket, by definition as per RFC 793, and therefore so does the wrapping Socket.

Actually my question is, at client side, when we are creating a socket, we can specify the local port that we want to use.

We can, but we rarely if ever do so.

After we have successful created a client socket at that local port, can we reuse that port for other client socket?

No.

Does that port bind to the socket permenantly until the socket is closed (or port close)?

Yes, or rather the other way round: the socket is bound to the port.

Since there is no "Listening" concept at client side, are we able to do the same thing as ServerSocket does (refer to ServerSocket can create multiple socket under one port)?

No.

Joachim Isaksson

A ServerSocket can simply be seen as a Socket factory for incoming connections. For every incoming client connection, the ServerSocket.accept() method returns a new Socket to communicate with that and only that client on.

In other words, any number of connections (limited only by the OS) can be made to the single ServerSocket, and each client connection will get a separate Socket to communicate on, all communicating using the same server side TCP port.

You should imagine a socket as a two-pair array of information:

  • {Self Port, Self Addr}
  • {Dest Port, Dest Addr}

therefore a single Server may have many connections connected to it that differ by their {Dest Port, Dest Addr}

example: Server port 10000 addr 10.0.0.1

Socket 1:

 - {10000,10.0.0.1}
 - {10001,10.0.0.2}

Socket 2:

 - {10000,10.0.0.1}
 - {10002,10.0.0.1} - address may seem the same but as a whole its a
   different destination

hope this helps.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!