【发布时间】:2015-05-29 16:48:21
【问题描述】:
我有 02 个应用程序,一个是用 java 编写的,另一个是用 C# 编写的。我需要在它们之间交换数据(字符串),因此我使用套接字连接。
目前,C# 应用程序充当服务器,Java 应用程序充当客户端。 C# 应用程序将持续侦听端口“7777”,Java 应用程序将在启动时创建一个到“localhost:7777”的套接字,并使用该套接字将数据发送到 C# 服务器。我不会关闭它们之间的连接,因为我需要经常交换数据。
在我的 C# 服务器应用程序有时需要向 Java 客户端应用程序发送一些字符串之前,一切都很好。我考虑使用另一个端口使我的 java 应用程序成为服务器,而 C# 应用程序也将成为客户端。但我不认为这是一个好的解决方案。
P/S:是的,套接字是双向的,在我当前的应用程序中,我可以将字符串数据从 C# 应用程序发送回 Java 应用程序,但前提是 Java 应用程序首先向 C# 应用程序发送字符串现在它正在等待来自 C# 应用程序的响应数据。
所以我想问一下是否还有其他更好的解决方案?如果我们总共只使用 1 个端口,有可能吗?非常感谢。
【问题讨论】:
-
一旦建立连接,两端的服务套接字和活动连接套接字是相等且双向的。这意味着客户端和服务器不再真正相关。目前尚不清楚为什么您需要另一个套接字来发送字符串。或者为什么您想将服务器反转为客户端,反之亦然。
-
我想在 cmets 中向您的 previous question 提及这一点。套接字是双向的。你不需要两个。
-
抱歉,我犯了一个错误,我的意思是有时,C# 服务器应用程序需要向 Java 客户端应用程序发送一些数据,但这是不可能的,因为我的 Java 应用程序无法监听到那个端口了,因为它已经被 C# 应用程序占用了。
-
sockets 是双向的,所以现在我确定你不需要额外的sockets,因为你的评论是在提到这个事实之后出现的,这表明你可能不明白我们的意思。套接字可用于使用同一个套接字进行接收和发送。
-
你需要在这里弄清楚你的概念,因为这听起来你有点困惑。考虑一个网络请求。浏览器连接到服务器并向服务器发送请求。服务器回复。全部在同一个 single 套接字连接上。没有打开新的套接字。不需要新的端口。连接后,客户端可以向服务器发送数据,服务器可以将数据发送回客户端。套接字允许读取和写入同一个套接字实例。一旦套接字连接上,客户端和服务器都可以读写。