Java套接字 - 需要帮助更好地理解它们

cga*_*ser 1 java sockets networking client-server

好的,所以我已经阅读了Oracal网站以及本网站上的一些问题.我仍然很难理解有关插座的一些事情,所以我会看看这里是否有人可以花时间向我的慢脑解释它.我正在做的是建立一个聊天客户端和聊天服务器(一举学习摇摆和插座).尽管我已经看过所有的例子,但我仍然不清楚他们是如何工作的.我知道带有输入流的1个套接字和带有输出流的1个套接字是如何工作的,但除此之外我无法理解,因为这是我发现的大多数资源所解释的.以下是我对此的一系列问题.

  1. 如果我希望能够同时处理输入和输出到客户端,我该怎么办?等待,然后如果服务器切换到输入流并获得更改,然后切换回输出流?或者我可以同时运行输入和输出流吗?
  2. 让我们说服务器必须同时处理几个客户端.我必须为每个客户做一个套接字吗?你有什么建议处理这个问题的好办法?
  3. 假设客户端想要更改其当前套接字的IP地址或端口并连接到其他服务器.我会创建一个新的套接字,还是有某种方法来改变当前的套接字?

这是我的主要问题.如果我能理解得那么多,我很确定我可以自己弄清楚我需要的其余部分.

.

pau*_*sm4 6

这是插座的优秀指南.它本身不是"Java套接字",但我认为你会发现它非常有用:

Beej的网络编程指南

回答你的问题:

问:如果我希望能够同时处理输入和输出到客户端,我该怎么办?

答:你不需要做任何特别的事情.套接字自动"双模式":您可以随时读取(如果有任何数据)或写入.

问:假设服务器必须同时处理多个客户端.我必须为每个客户做一个套接字吗?

答:其实,系统给出为每个新客户端连接的插座.你没有"创造"一个 - 它是给你的.

每个新连接都是一个新的套接字.

通常,您的服务器将生成一个新线程来为每个新客户端连接提供服务.

问:假设客户端想要更改其当前套接字的IP地址或端口并连接到其他服务器.我会创建一个新的套接字,还是有某种方法来改变当前的套接字?

答:客户端将终止现有连接并打开新连接.