Tag: 套接字

检测sockets断开?

我有点不高兴,这不能以优雅的方式处理,在尝试了几个SO问题的答案中提到的不同解决方案( 这个 , 这个和其他几个)之后,我仍然无法检测到sockets断开(通过拔掉电缆)。 我正在使用NIO非阻塞套接字,除了我发现无法检测服务器断开连接外,一切都运行正常。 我有以下代码: while (true) { handlePendingChanges(); int selectedNum = selector.select(3000); if (selectedNum > 0) { SelectionKey key = null; try { Iterator keyIterator = selector.selelctedKeys().iterator(); while (keyIterator.hasNext()) { key = keyIterator.next(); if (!key.isValid()) continue; System.out.println(“key state: ” + key.isReadable() + “, ” + key.isWritable()); if (key.isConnectable()) { finishConnection(key); } else if […]

使用套接字的客户端 – 服务器 – 客户端通信

我正在构建一个小型聊天应用程序,其中客户端A希望通过服务器B向客户端C发送内容。 首先,这是解决问题的正确方法吗? 我能够向服务器发送数据和从服务器接收数据,但它仅限于客户端。例如,如果客户端A向服务器B发送数据并且客户端C正在向服务器B发送数据,那么我可以将数据发送回A和C就像一个echo服务器。 但我想要的是通过服务器B将来自客户端A的数据转发到客户端C. 以下是服务器代码: public class Server { public static void main(String[] args) { int port = 666; //random port number try { ServerSocket ss = new ServerSocket(port); System.out.println(“Waiting for a client….”); System.out.println(“Got a client 🙂 … Finally, someone saw me through all the cover!”); System.out.println(); while(true) { Socket socket = ss.accept(); SSocket sSocket […]

测试Java套接字

我正在开发一个网络应用程序,我想让unit testing正确。 这个时候我们会这样做,你知道吗? 🙂 不过,我在测试网络连接时遇到了麻烦。 在我的应用程序中,我使用普通的java.net.Socket 。 例如: import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Message { byte[] payload; public Message(byte[] payload) { this.payload = payload; } public boolean sendTo(String hostname, int port) { boolean sent = false; try { Socket socket = new Socket(hostname, port); OutputStream out = socket.getOutputStream(); out.write(payload); socket.close(); […]

Socket,BufferedReader挂起在readLine()

我有一台服务器,最初这样做: – BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); for (;;) { String cmdLine = br.readLine(); if (cmdLine == null || cmdLine.length() == 0) break; … } 稍后它将套接字传递给另一个类“foo”此类等待特定于应用程序的消息。 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); appCmd=br.readLine(); 我的客户端发送以下序列: “谷仓” “你好吗?\ n” “\ n” “将它传递给foo \ n” “\ n” 问题是有时“foo”没有得到它的回应。 它挂在readLine() 。 服务器中的readLine()使用提前读取缓存数据的可能性是多少,“foo”类正在变得饥饿? 如果我在客户端添加睡眠,它可以工作。 但它永远有效的可能性是多少? “谷仓” “你好吗?\ n” “\ […]

如何查找连接到服务器的客户端的IP地址?

我的客户端PC通过以太网上的套接字连接到服务器PC,如何从服务器端代码中找到该客户端的IP。 服务器在新线程中为每个客户端抛出一个套接字。 当我在客户端套接字上执行csocket.getLocalAddress().toString()时,我仍然获得服务器IP地址。 ( csocket是服务器在现在客户端连接上生成并将其传递给新线程的套接字)。

本地JVM之间的通信

我的问题:我可以/应该采用什么方法在本地运行的两个或多个JVM实例之间进行通信? 问题的一些描述: 我正在为一个项目开发一个系统,该系统需要单独的JVM实例来完全隔离某些任务。 在它运行时,’父’JVM将创建它将期望执行的’子’JVM,然后将结果返回给它(以相对简单的POJO类或结构化XML数据的格式)。 不应使用SysErr / SysOut / SysIn管道传输这些结果,因为孩子可能已经将这些结果用作其运行的一部分。 如果子JVM在一定时间内没有响应结果,则父JVM应该能够通知子进程停止处理或终止子进程。 否则,子JVM应在完成其任务结束时正常退出。 迄今为止的研究: 我知道有许多技术可能有用,例如…… 使用Java的RMI库 使用套接字传输对象 使用Cajo,Hessian等分发库 …但我有兴趣听取其他人在推行其中一种方案或其他方案之前可能会考虑的方法。 感谢您对此提供任何帮助或建议! 编辑: 要转移的数据量相对较小,它主要只是少数包含字符串的POJO,这些字符串将代表子项执行的结果。 如果任何解决方案在大量信息上效率低下,这在我的系统中不太可能成为问题。 传输的数量应该是非常静态的,因此不必是可扩展的。 转移的延迟 –在这种情况下不是一个关键问题,尽管如果需要对结果进行任何“轮询”,这应该能够相当频繁而没有显着的开销,因此我可以在以后维护响应式GUI(例如进度条)

如何编写服务器/客户端video和音频流应用程序?

我必须创建一个客户端/服务器系统来流式传输video和音频。 这很简单。 喜欢youtube风格。 服务器应首先参加提供媒体列表的客户端,并等待每个客户端的选择以开始流式传输媒体。 直到创建一个套接字并显示一个简单的列表我就在它上面;)但我不知道我可以使用哪个类来传输。 这个例子基本上是youtube风格。 如何开始流式传输,客户端如何暂停再现,怎么能? 我知道如何流式传输文字,但video呢? 你知道任何教程页吗? 它与这个简单的服务器客户端示例有很大不同? import java.io.*; import java.io.*; import java.net.*; public class ThreadedEchoServer { public static void main(String[] args) { try { int i = 1; ServerSocket s = new ServerSocket(8189); while(true) { Runnable r = new ThreadedEchoHandler(incoming, i); Thread t = new Thread(r); t.start(); i++; } } catch […]

SSL套接字php代码需要转换为Java

我有一个Pem文件,我使用这个PHP代码连接到c ++ SSL服务器,但现在我需要这个用Java编写的PHP代码 $ctx = stream_context_create(); stream_context_set_option($ctx, ‘ssl’, ‘local_cert’, ‘cert.pem’); stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $pass); $fp = stream_socket_client(‘ssl://serverURL’, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$fp) { print “Failed to connect $err $errstr\n”; return; } 有关如何在Java中读取cert.pem文件然后建立SSL套接字的任何想法? 谢谢!

客户端/服务器不接受ObjectInput和Output流

我有一个程序有两个服务器端进程。 一台服务器只是向客户端发送一个ArrayList。 另一台服务器首先从客户端获取一个字符串,然后找到与该ID对应的正确记录并将该记录发回。 我遇到了第二个服务器进程的问题。 请参阅下面的println语句,其中显示“卡在这里”。 这就是程序挂起的地方。 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; public class CustServer{ public static void main(String args[]) throws IOException, ClassNotFoundException{ ServerSocket serverSocket1 = null; ServerSocket serverSocket2 = null; ArrayList list = null; String driverName = “sun.jdbc.odbc.JdbcOdbcDriver”; String connectionURL […]

如何中断阻塞调用UDP套接字的receive()

我有一个UDP服务器监听来自客户端的数据包。 socket = new DatagramSocket(port); while (isListen) { byte[] data = new byte[1024]; DatagramPacket packet = new DatagramPacket(data, 0, data.length); socket.receive(packet); } receive()方法将在收到数据包之前永远等待。 是否有可能停止等待接收? 我可以设置一个boolean isListen来停止循环。 另一方面,如果套接字正在等待,那么如果没有从客户端发送数据包,它将永远等待。