好的,所以我已经阅读了Oracal网站和本网站上的一些问题。我仍然很难理解有关插座的一些事情,所以我会看到这里是否有人可以花时间向我的慢脑解释它。我正在做的是建立一个聊天客户端和聊天服务器(一举学习摇摆和插座)。尽管我已经看过所有的例子,但我仍然不清楚他们是如何工作的。我知道带有输入流的1个套接字和带有输出流的1个套接字是如何工作的,但除此之外我无法理解,因为这是我发现的大多数资源所解释的。以下是我对此的一系列问题。
这是我的主要问题。如果我能理解得那么多,我很确定我可以自己弄清楚我需要的其余部分。
答案 0 :(得分:6)
这是套接字的绝佳指南。它本身不是“Java套接字”,但我认为你会发现它非常有用:
Beej's Guide to Network Programming
回答你的问题:
问:如果我希望能够处理输入和输出到客户端 同一时间我该怎么做?
答:你不需要做任何特别的事情。套接字自动“双模式”:您可以随时阅读(如果有任何数据)或写入。
问:可以说服务器必须同时处理几个客户端。生病 必须为每个客户端设置套接字吗?
答:实际上,系统为每个新客户端连接提供你套接字。你没有“创造”一个 - 它是给你的。
每个新连接都是一个新套接字。
通常,您的服务器将生成一个新线程来为每个新客户端连接提供服务。
问:让我们说客户想要更改他们的IP地址或端口 当前套接字并连接到其他服务器。我会创造吗? 一个新的套接字,还是有某种方法来改变当前的套接字?
答:客户端将终止现有连接并打开新连接。
答案 1 :(得分:1)
1.-如果我希望能够同时处理输入和输出到客户端,我该怎么办?等待,然后如果有变化 服务器切换到输入流并获取更改,然后切换 回到输出流?或者我可以同时运行输入和输出流 一次?
这取决于您的协议,如果您的客户端启动连接,那么您的服务器会在转到输出流并发送内容之前等待输入。作为tcp连接或甚至使用文件的每个连接都有输入流和输出流。
2.-让我们说服务器必须同时处理几个客户端。我必须为每个客户做一个套接字吗?你会建议什么? 一个好方法来处理这个?
这有不同的策略,包括多线程,所以现在专注于streams.Or保持一个服务器一个客户端。
3.-让我们说客户想要更改当前套接字的IP地址或端口并连接到其他服务器。我愿意吗? 创建一个新的套接字,或者有什么方法可以改变当前的套接字?
是的,套接字的定义是IP地址通过特定端口建立的连接,如果其中任何一个更改,则需要新的套接字。
答案 2 :(得分:1)
我会尽力在这里尽力而为,但我真的不认为这是这类问题的地方:
首先,您需要了解套接字是底层操作系统套接字的抽象(unix套接字,win socks等)。
这些类型的套接字用于模拟传输层的面向连接的服务(查看OSI模型)。所以这意味着套接字为客户端提供了一个字节流,并为客户端提供了一个字节流,所以为了回答你的第一个问题,这些流是独立的。当然,您负责设计您在这些流程中所说的协议。
要回答第二个问题,您需要了解TCP连接的工作原理,基本上您的服务器正在侦听一个端口中的一个或多个网络接口(端口是TCP寻址机制),并且可以处理可配置的传入同时连接的积压。所以答案是,对于任何传入连接,通常会在线程池中创建或获取服务器上的新线程。
要回答第三个问题,请在主机之间建立连接,因此如果您需要更改其中任何一个,则需要创建新连接。
希望这有帮助。
干杯