Tag: 套接字

Java Solaris NIO OP_CONNECT问题

我有一个Java客户端使用Java NIO使用TCP套接字连接到C ++服务器。 这适用于Linux,AIX和HP / UX,但在Solaris下, OP_CONNECT事件永远不会触发。 更多详情: Selector.select()返回0,’selected key set’为空。 该问题仅在连接到本地计算机时(通过环回或以太网接口)发生,但在连接到远程计算机时有效。 我已经在两台不同的Solaris 10机器上确认了这个问题; 使用JDK版本1.6.0_21和_26的物理SPARC和虚拟x64(VMWare)。 以下是一些演示此问题的测试代码: import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class NioTest3 { public static void main(String[] args) { int i, tcount = 1, open = 0; String[] addr = […]

如何通过Internet在两台计算机之间发送数据

我一整天都在努力解决这个问题,我希望有人可以帮助我。 我的问题很简单:我希望通过互联网将数据(主要是简单的命令)从一台PC传输到另一台PC。 当两台计算机连接到我的家用路由器时,我已经能够使用Java中的套接字来实现这一点。 然后,我使用两个不同的移动电话将两台计算机连接到互联网,并尝试再次传输数据。 我使用移动电话,因为这提供了到互联网的直接路由,如果我使用我的路由器,我必须设置端口转发,至少,这是我理解它。 我认为问题在于我设置客户端套接字的方法。 我用了: Socket kkSocket = new Socket(ipAddress, 3333); 其中ipAddress是运行服务器的计算机的IP地址。 我通过右键单击连接,状态,支持来获取IP地址。 这是正确使用的IP地址还是在哪里可以获取服务器的地址? 此外,是否可以为我的计算机获取一个固定的名称,而不是输入IP地址,因为每次使用我的手机连接到互联网时这都会改变? 或者,有没有更好的方法来解决我的问题,如使用http,如果是这样,我在哪里可以找到更多相关信息? 编辑:是否有可能让服务器程序在互联网上的某个服务器上运行。 我的原始服务器将是一个向该服务器发送信息的客户端。 然后,此服务器将此信息传递给我的原始客户端,反之亦然。 这样,我的计算机的IP地址无关紧要,因为我只需要知道在网络上某处托管的服务器的地址。 这似乎是一个更好的解决方案吗? 我从哪里开始实施这样的解决方案? 谢谢!

在客户端JAVA中调用socket.close()时,套接字未关闭服务器端

我在java中遇到套接字问题。 我有一个正在使用accept()监听的ServerSocket ,并为每个客户端请求生成线程。 客户端和服务器之间的通信正常。 我正在使用输入流从serverthreads中的客户端读取数据,例如: inputStream = mySocket.getInputStream(); bytes = inputStream.read(buffer); 我的问题是,如果我从客户端调用socket.close(),则对bytes = inputStream.read(buffer);的阻塞调用没有任何反应bytes = inputStream.read(buffer); ,它继续阻止。 但是如果我从服务器关闭套接字,然后是inputStream.read(buffer);它就有效inputStream.read(buffer); 客户端返回“-1”。 SERVER-MAINTHREAD: //SERVER MAIN THREAD, SPAWNS CLIENT THREADS ServerSocket serverSocket = new ServerSocket(SERVERPORT); while (listening){ new ServerThread(serverSocket.accept(), monitor).start(); } SERVER-CLIENTTHREADS: public class ServerThread extends Thread{ public ServerThread(Socket socket, Monitor monitor) { this.socket = socket; this.monitor = monitor; […]

用Java构建IRC bot

经过一些谷歌搜索,一个明显的答案或Java IRC机器人的起点没有出现,我的问题; 是否有一个现有的框架来帮助我建立一个IRC机器人? 如果不这样做,这是否可以使用Java中的套接字执行此操作并且有人在网络上看到了一个示例? 欢呼伙计们。

Java:套接字还是RMI?

我需要将我们的应用程序分成轻量级的gui应用程序和业务逻辑应用程序。 这不是客户端/服务器设置,因为“服务器”组件只有一个客户端。 应用程序的另一个限制是它只有一个入口/出口点。 因此,如果我们使用RMI,它将只能在一个函数上。 所有表单数据已经包装成一个字符串并通过一个传输区域。 我应该只使用Java套接字来增强此应用程序,还是使用RMI? 还是其他一些Java技术? 我之前的post概述了我们的应用程序的要求,但它没有得到答复。 https://stackoverflow.com/questions/2604528/terminal-panel-pc-single-server-solution-client-server-or-rdp 干杯。

编写java.net.SocketImplFactory

SocketImplFactory的javadoc特别提到“通过更改创建套接字实现的套接字工厂,应用程序可以自行配置以创建适合本地防火墙的套接字。” 但是,为了连接到有问题的防火墙,需要一个真正的套接字来进行真正的连接。 更换默认的SocketImplFactory后,如何获得真正的套接字? 我知道在Java的Java上可以使用java.net.PlainSocketImpl和java.net.SocksSocketImpl,但有没有办法在JVM之间移植?

在Java Socket上设置源端口?

我是套接字编程的新手: 是否可以在Java Socket上显式设置源端口? 我正在开发一个客户端/服务器应用程序,客户端可能会在几个端口上侦听来自服务器的回复。 如果我可以在初始化Socket时在客户端设置此回复端口,那将是很好的,这样服务器就能够确定在另一端回复哪个端口。

中断连接sockets

我有一个GUI,其中包含要连接的服务器列表。 如果用户单击它连接到它的服务器。 如果用户单击第二个服务器,它将断开第一个服务器并连接到第二个服务器。 每个新连接都在一个新线程中运行,以便程序可以执行其他任务。 但是,如果用户在第一个服务器仍然连接时单击第二个服务器,则会有两个同时连接。 我正在使用它连接,而connect()是阻塞的行: Socket socket = new Socket(); socket.connect(socketAddress, connectTimeout); 我想也许是Thread.currentThread().interrupt(); 会工作,但没有。 我是否需要稍微重构我的代码以便继续进行第一次连接,但是之后会立即关闭它? 或者实际上是一种中断connect方法的方法。

转发端口

我有一个简单的要求,即基于套接字的通信的软件级端口转发/隧道。 我有一个使用套接字的源服务器和端口。 这是一个java程序,可以在windows和linux中运行,这是无关紧要的。 我有设备继续向此端口发送数据。 可能存在双向通信 我想将此数据重定向到另一个远程服务器和端口。 因此,对于客户,每当我移动我的应用服务器时,他们都不必担心更改IP地址。 是否有任何工具/ deamon /服务程序可用于配置和执行此操作? 我试过SSH,但根据我的理解,这需要一个支持SSH协议的服务器。 就我而言,这不适用。 我也尝试过使用JSch,但这又是java格式的SSH实现。 有人会抛出一些指针吗? 是否可以在linux中使用iptables NAT?

非阻塞套接字

在Java中实现非阻塞套接字的最佳方法是什么? 还是有这样的事情? 我有一个通过套接字与服务器通信的程序,但是如果数据/连接有问题,我不希望套接字调用阻塞/导致延迟。