Tag: 网络编程

ServerSocket reuseAddress允许绑定到已绑定的端口?

使用Netty时 ,我很惊讶如果我使用reuseAddress选项,它允许ServerSocket绑定到同一地址而不会引发“已绑定exception” ServerBootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory(Executors .newCachedThreadPool(), Executors.newCachedThreadPool())); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { ChannelPipeline p = pipeline(); p.addLast(“handler”, new DummyHandler()); return p; } }); bootstrap.setOption(“reuseAddress”, true); bootstrap.bind(new InetSocketAddress(2000)); bootstrap.bind(new InetSocketAddress(2000)); 我只是认为reuseAddress允许新的套接字重用一个close-wait套接字,但这是不同的。 以下是netstat命令的结果 C:\Users\secmask>netstat -a -n|grep 2000 TCP 0.0.0.0:2000 0.0.0.0:0 LISTENING TCP 0.0.0.0:2000 0.0.0.0:0 LISTENING 我错过了什么吗? 这是怎么回事?

带有httpClient的SSLPeerUnverifiedException

我正在尝试使用自签名证书测试安全的http连接…仅用于开发目的。 但是我无法解决对等体未经过身份validation的exception,当然我已经查看了有关此exception的类似post,以下是我正在使用的当前实现: public class SelfCertificatesSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance(“TLS”); public SelfCertificatesSocketFactory(KeyStore trustStore) throws NoSuchAlgorithmException,UnrecoverableKeyException,KeyStoreException,KeyManagementException { super(trustStore); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; } @Override […]

读取套接字时的Java中断线程

可能重复: 如何立即终止套接字IO操作的线程阻塞? 我有客户端在线程中运行想要从Java中读取套接字。 但是在阅读时,也许我想要杀死这个主题。 所以我interrupt它,但socket的读取方法是否会抛出InterruptedException ? 我没找到。 那么,如果在读取套接字时阻塞线程,我怎么能很好地要求线程死掉? 谢谢

向DatagramSocket添加超时 – receive()

我需要在这段代码上创建一个10秒的超时 DatagramPacket getack = new DatagramPacket(incoming,incoming.length); socket.receive(getack); 我需要它列出10s的传入数据包,如果它在10s之前收到一个数据包它将跳过if语句,如果它达到10s它将跳转到else并重新发送数据包。 这是可能的,我怎么能这样做,我对此很新。 private static void sendDATA() { outgoing = new byte[512]; // Empty array try { ByteBuffer sDATA = ByteBuffer.allocate(516); // 512 – 2 byte opcode, 2 byte block #, 512 data DatagramPacket data = new DatagramPacket(outgoing, outgoing.length, InetAddress.getByName(clientip), clientport); InputStream fis = new FileInputStream(new File(FILE)); int a; […]

什么是“服务器”上的存根,骨架是什么意思?

存根在服务器端做什么? 什么是骨架 ? 这是维基百科的图表。 我在服务器计算机和客户端计算机上都安装了存根 。 我知道存根有助于客户端的网络连接,但是存根在服务器端做了什么? 在上图中骨架是什么意思?

在Java中扭曲

Twisted最接近的Java替代品是什么?

java使用套接字发送文件

我正在尝试使用Java将文件从一台计算机发送到另一台计算机。 我已经编写了下面的代码,如果发送方和接收方都在同一台计算机上启动,但如果它们在不同的机器上工作,则接收文件大小比原始文件大,并且它已损坏,它可以正常工作。 注意:我正在尝试传输最大10 MB的文件。 我怎样才能解决这个问题? 发件人: ServerSocket server_socket = new ServerSocket(8989); File myFile = new File(myPath); Socket socket = server_socket.accept(); int count; byte[] buffer = new byte[1024]; OutputStream out = socket.getOutputStream(); BufferedInputStream in = new BufferedInputStream(new FileInputStream(myFile)); while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); out.flush(); } socket.close(); 接收器: Socket socket = new […]

如何指定要在SSL会话中使用的密码套件

我在端口443上创建了一个套接字,如下所示: socket = (SSLSocket) factory.createSocket(hostName, port); 然后,我想在这个插槽中看到启用的密码套件,我用过: String[] enCiphersuite=socket.getEnabledCipherSuites(); System.out.println(“Enabled ciphersuites are: “+Arrays.toString(enCiphersuite)); 然后,我想只选择一个我希望我的应用程序在与远程服务器创建握手时使用的密码套件。 我做了以下事情: String pickedCipher[] ={“TLS_RSA_WITH_AES_128_CBC_SHA”}; socket.setEnabledCipherSuites(pickedCipher); System.out.println(“ciphersuite set to: “+Arrays.toString(pickedCipher)); 然后我做了握手,并检查了会话密码套件: socket.startHandshake(); System.out.println(“Session ciphersuite is”+socket.getSession().getCipherSuite() ); 但我发现握手后打印输出语句中打印的密码名称(据我所知,这是会话中实际使用的密码)不是我之前使用setEnabledCipherSuites() 为什么我仍然没有看到我选择的密码套件是用过的密码套件? 而且,我还尝试了getEnabledCipherSuites()并在setEnabledCipherSuites之后将其打印出来,发现列表没有更改为我设置的内容。 我不确定何时打印启用的密码套件,这个密码套件列表是否依赖于Java并始终是相同的列表,还是取决于客户端或服务器? 有人可以解释一下吗? 编辑:在握手之前我只有以下几行: SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); SSLSocket socket=null; try { socket = (SSLSocket) factory.createSocket(hostName, port); socket.setSoTimeout(15000); socket.startHandshake(); //handshake . .

Java套接字编程

我正在使用java套接字构建一个简单的客户端/服务器应用程序并尝试使用ObjectOutputStream等。 我一直在关注这个教程http://java.sun.com/developer/technicalArticles/ALT/sockets ,当它谈到通过套接字传输对象时开始。 请参阅我的客户端代码http://pastebin.com/m37e4c577然而,这似乎不起作用,我无法弄清楚什么是不起作用。 底部注释掉的代码直接从教程中复制出来 – 当我只使用它而不是创建客户端对象时,这个工作正常。 谁能看到我做错了什么?

通过网络进行Java序列化

只是想知道是否有一个教程或如何序列化对象,通过网络将它们放入流中,并在另一侧反序列化它。 我理解序列化,I / O,流,套接字等的原理,我只想了一个客户端向服务器发送对象的示例。