Tag: 套接字

在java中的套接字上发送屏幕截图(bufferedImage)

我在socket上发送bufferedImage,我正在使用这篇文章中的示例: 寄件人 BufferedImage image = ….; ImageIO.write(image, “PNG”, socket.getOutputStream()); 接收器 BufferedImage image = ImageIO.read(socket.getInputStream()); 它工作 – 如果,只有在这一行之后我关闭发送者的outputStream: ImageIO.write(image, “PNG”, socket.getOutputStream()); 除了关闭outputStream之外我还能做些什么吗? 另外,我还能做些什么来避免使用ImageIO吗? 似乎需要很长时间才能做任何事情。 另请注意,由于性能问题,应该不惜一切代价避免读取或写入硬盘。 我需要尽快进行这种传输,(我正在尝试并尝试创建类似于VNC的客户端并将每个屏幕截图保存到硬盘上会大大减慢一切) @Jon Skeet 编辑3: 发件人:(请注意,我发送的JPG图像不是PNG)。 int filesize; OutputStream out = c.getClientSocket().getOutputStream(); ByteArrayOutputStream bScrn = new ByteArrayOutputStream(); ImageIO.write(screenshot, “JPG”, bScrn); byte[] imgByte = bScrn.toByteArray(); bScrn.flush(); bScrn.close(); filesize = bScrn.size(); out.write(new String(“#FS ” […]

我怎样才能在Java中嗅探网络流量?

我只是四处寻找如何制作一个程序来嗅探我在Java中的网络流量,但我找不到任何东西。 我想知道是否有任何方法可以查看网络流量。 我听说有一个Socket的想法,但我不明白这是怎么回事。 所以无论如何,只是寻找API或自己编写它的方法。 编辑:我很乐意喜欢API,但我还想澄清使用Socket嗅探流量的方法。

服务器和客户端必须具有声明ObjectOutputStream和ObjectInputStream的反向序列吗?

在我的实验中, 如果服务器有这个: ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 然后客户端必须以相反的顺序执行此操作: ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); 否则服务器和客户端将死锁。 这是什么原因? 它是否有正式的API规范?

Java服务器multithreading

如何在Java中实现multithreading服务器? 服务器侦听端口(例如5000)并在单独的线程中提供连接并继续侦听更多客户端的位置。

如何让Java套接字使用公共IP?

我没有遇到使用localips的套接字没有问题,但是一旦我将代码更改为使用public ips,我就一直得到java.net.ConnectException。 我使用端口8084,据我所知,在其他地方没有使用在命令提示符下,netstat -a | grep 8084显示:文件STDIN:TCP user-9114eb19a8:8084 user-9114eb19a8:0 LISTENING 我已经进入我的路由器并确保它是开放的我使用请求http://www.whatismyip.org获取我的公共IP 服务器: serverSocket = new ServerSocket (8084); 客户: socket = new Socket (hostaddr, 8084); //hostaddr is a string containing my public-IP //it works when the program is run on a localnetwork and I am using my local-ips

Java Socket端口转发

我使用套接字在Java中创建了一个联网游戏。 它工作得很好,除了……只能通过我的局域网。 :/我想要做的是设置它,以便我可以启动在家用计算机上运行的服务器,并将客户端代码,在可执行的jar中发送给其他人,让他们能够启动它和通过互联网连接。 但就像…我不知道如何设置我的调制解调器和路由器。 :(我有一个无线清除调制解调器,其配置页面如下所示: http://sofzh.miximages.com/java/ 还有一个Netgear路由器,其页面如下所示: http://sofzh.miximages.com/java/ 现在,在客户端和服务器运行器类中,我将PC的私有IP地址与我选择的端口号一起传递给ServerSocket和Socket对象。 我听说套接字可以是UDP或TCP,具体取决于你如何设置,或者……? 我不做那样的事情,但是我只是实例化它们并传递它们的2个值,然后它们就…… 在服务器的代码中: ServerSocket sock = new ServerSocket(); sock.bind(new InetSocketAddress(IP, 9001)); 客户代码: Socket sock = new Socket(IP, 9001); 同样,我需要知道如何通过更改路由器/调制解调器设置来相应地更改代码。 “IP”是一个字符串,表示我的计算机的私有IP,192.168.1.10,并且该程序仅在我传递给Socket&ServerSocket的字符串时才有效。 就像我说的,我有一个调制解调器连接到一台连接到我的电脑的路由器。 那么,有人可以向我解释(详细说明,因为我是一个菜鸟)我究竟需要做些什么来配置它们,以及我必须对我的代码进行的更改?

设置套接字接收超时

我想将数据发送到服务器,然后等待一分钟的答案,然后关闭套接字。 怎么做? DatagramPacket sendpack = new ……; socket.send(pack); DatagramPacket recievepack = new …..; //wait 1 minute{ socket.recieve(buf); //wait 1 minute} socket.close();

检查ClientSocket是否在java中断开连接

这是一个跟进: 这个问题 基本上,我有一个服务器循环来管理与一个单独客户端的连接。 在循环中的某一点,如果ClientSocket存在,它会尝试读取以检查客户端是否仍然连接: if (bufferedReader.read()==-1 ) { logger.info(“CONNECTION TERMINATED!”); clientSocket.close(); setUpSocket(); //sets up the server to reconnect to the client }else{ sendHeartBeat(); //Send a heartbeat to the client } 问题是,一旦创建了套接字,应用程序将挂起读取,我假设等待永远不会发生的数据,因为客户端永远不会发送到服务器。 在此之前没问题,因为这个正确处理断开连接(当客户端断开连接时读取最终会失败)并且循环将尝试重新建立连接。 但是,我现在已经添加了上面的sendHeartBeat()方法,它定期让客户端知道服务器仍在运行。 如果读取持有线程,则心跳不会发生! 所以,我假设我正在测试连接是否仍然不正确。 我可以,作为一个快速的黑客,在一个单独的线程中运行bufferedReader.read(),但随后我会遇到各种各样的并发问题,我真的不想处理。 所以问题有几个:1)我是否正确检查客户端断开连接? 2)如果没有,我该怎么办? 3)如果我正确地做了我怎么做,我得到的读取不能让流程成为人质? 或者是穿线唯一的方式?

java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):connect

您好我使用Apache HTTP Client 4.0基于HTTPS协议上传服务器上的一些文件。 上传的应用程序全天候运行。 今天突然间它开始抛出这个exception – java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:333) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 谁能帮帮我吗? 我完全不知道发生了什么事? […]

关闭输出流时Java套接字的行为

有人可以解释Java套接字中的以下行为: 一般的想法是这样的: 打开套接字,获取I / O流。 写请求,关闭流 读取响应,在流中关闭 关闭sockets。 这是我的问题/问题。 如果我使用PrintWriter进行输出,然后将其关闭,它会关闭整个套接字,后续的读操作会失败。 相反,如果我直接使用套接字的shutdownOutput()方法,它会正确关闭输出流通道,同时保持套接字处于活动状态。 为什么关闭PrintWriter对象会占用整个套接字?