Tag: sockets

java.net.Socket threadsafe以什么方式?

我有一个Socket,我正在阅读和写作,通过BufferedReaders和BufferedWriters。 我不确定哪些操作可以从单独的线程中完成。 我猜想同时从两个不同的线程写入套接字是个坏主意。 与从两个不同的线程同时读取套接字相同。 在另一个线程上写入时在一个线程上阅读怎么样? 我问,因为我想在读取时长时间阻塞一个线程,因为它等待更多数据,但在这个等待期间,我偶尔也会在套接字上发送数据。 我不清楚这是否是线程安全的,或者我是否应该在写入之前取消读取(这会很烦人)。

使用SSLSocket Java创建应用程序

我想创建一个使用SSLSocket的应用程序:客户端向服务器发送一个String ,服务器将大写该String并发送回客户端进行显示。 SSLServer public class SSLServer { public static void main(String args[]) throws Exception { try{ //Creaet a SSLServersocket SSLServerSocketFactory factory=(SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket sslserversocket=(SSLServerSocket) factory.createServerSocket(1234); //Tạo 1 đối tượng Socket từ serversocket để lắng nghe và chấp nhận kết nối từ client SSLSocket sslsocket=(SSLSocket) sslserversocket.accept(); //Tao cac luong de nhan va gui du lieu cua […]

SSL无法在Android 2.2上运行(仅限2.3)

我在调用httpsURLConnection.getInputStream()时在LogCat上得到这个 SSL握手失败:SSL库失败,通常是协议错误错误:14094412:SSL例程:SSL3_READ_BYTES:sslv3警报错误证书(external / openssl / ssl / s3_pkt.c:1127 0x29eb40:0x00000003) 我在Andorid 2.3上进行了测试,效果很好。 我的服务器要求客户端validation 也许FROYO不支持这种握手……我不知道…… 我也尝试过使用httpclient。 在每种情况下都失败…… private void process() throws Exception { char[] pass = “clientpass”.toCharArray(); InputStream ksStream = getAssets().open(“clientKeyStore.bks”); KeyStore keyStore = KeyStore.getInstance(“BKS”); keyStore.load(ksStream, pass); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, pass); ksStream.close(); X509TrustManager[] tm = new X509TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, […]

如何通过java中的套接字发送图像?

我正在写一个客户端 – 服务器程序,我希望它发送一个图像。 代码如下: //RECEIVER while(true){ try{ socket = server.accept(); out = new ObjectOutputStream(socket.getOutputStream()); out.flush(); in = new ObjectInputStream(socket.getInputStream()); System.out.println(“Connected to “+PORTA+”.”); while(!socket.isClosed()){ System.out.println(“\nPrint the action”); azione = reader.readLine(); if(azione.equals(“screenshot”)){ out.writeObject(“screenshot”); out.flush(); BufferedImage screenshot = ImageIO.read(in); ImageIO.write(screenshot, “jpg”, new File(“screenshot.jpg”)); } }catch(Exception ex){ System.out.println(“Not connected.\n”); } } 和服务器: while(true){ try{ socket = new Socket(INDIRIZZO, PORT); […]

Java中的密钥SSL套接字连接

我正在加密服务器和客户端之间的TCP连接。 在研究和测试过程中,我倾向于使用密钥加密。 我的问题是我找不到任何有关如何实现此function的教程。 我发现的教程围绕一次性https请求,我需要的只是一个SSL Socket。 我到目前为止编写的代码如下。 我几乎可以肯定它需要扩展,我只是不知道如何。 任何帮助表示赞赏。 private ServerSocketFactory factory; private SSLServerSocket serverSocket; factory = SSLServerSocketFactory.getDefault(); serverSocket = (SSLServerSocket) factory.createServerSocket( ); 用于接受客户端连接的服务器代码 SSLSocket socket = (SSLSocket) serverSocket.accept(); socket.startHandshake(); 我只是不知道如何实际握手。 参考: http : //docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html

使用Java扫描端口的最快方法

我制作了非常简单的端口扫描程序,但运行速度太慢,所以我正在寻找方法让它扫描速度更快。 这是我的代码: public boolean portIsOpen(String ip, int port, int timeout) { try { Socket socket = new Socket(); socket.connect(new InetSocketAddress(ip, port), timeout); socket.close(); return true; } catch (Exception ex) { return false; } } 此代码在此测试特定端口是否在特定IP上打开。 对于超时,我使用最小值200,因为当我降低时,它没有足够的时间来测试端口。 那么它运行良好,但从0到65535扫描需要太多。有没有其他方法可以在不到5分钟的时间内从0扫描到65535?

正确关闭SSLSocket

我想在Java中实现SSL代理。 我基本上打开了两个套接字browser-proxy , proxy-server ,并运行两个线程,这些线程将写入proxy-server ,它们从browser-proxy读取的内容,反之亦然。 每个线程看起来像这样: while (true) { nr = in.read(buffer); if (nr == -1) System.out.println(sockin.toString()+” EOF “+nr); if (nr == -1) break; out.write(buffer, 0, nr); } sockin.shutdownInput(); sockout.shutdownOutput(); // now the second thread will receive -1 on read 每个线程只关闭输入套接字,以便最终关闭两个套接字。 但是如果我想使用SSLSocket怎么办? 似乎那里不支持shutdownOutput/Input方法。 这是我得到的例外。 Exception in thread “Thread-35” java.lang.UnsupportedOperationException: \ The method shutdownInput() is […]

如何在Java中确定路由器/网关的IP?

如何在Java中确定路由器/网关的IP? 我可以轻松地获得我的IP。 我可以使用网站上的服务获取我的互联网IP。 但是如何确定网关的IP? 如果你了解自己的方式,这在.NET中有点容易。 但是你如何用Java做到这一点?