Tag: 套接字

Java多播生存时间始终为0

我在设置数据报包上的TTL时遇到问题。 我在将数据包发送到multicastSocket之前调用数据包上的setTTL(…)方法但是如果我使用ethereal捕获数据包,则TTL字段始终设置为0

Java – 由块读取文件?

我知道如何按字节读取文件,但无法找到如何以字节块读取它的示例。 我有一个字节数组,我想读取512字节的文件,并通过套接字发送它们。 我试过通过读取文件的总字节数,然后减去512字节,直到我得到一个小于512字节的块并发信号通知EOF和传输结束。 我正在尝试实现TFTP,其中数据以512字节的块发送。 无论如何会感谢一个例子。

通过Java Socket读取映像文件

这是我到目前为止, Socket clientSocket = new Socket(HOST, PORT); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); InputStream is = socket.getInputStream(); byte[] byteChunk = new byte[1024]; int c = is.read(byteChunk); while (c != -1){ buffer.write(byteChunk, 0, c); c = is.read(byteChunk); } BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(buffer.toByteArray())); 我的代码问题是ImageIO.read()返回null。 当我打印ByteArrayOutputStream对象的内容时,我得到的是标题部分 HTTP/1.1 200 OK Date: Fri, 30 Dec 2011 11:34:19 GMT Server: Apache/2.2.3 […]

你如何处理Java中的Socket Disconnecting?

大家好。 我有一个使用ServerSocket和Socket类用java编写的服务器。 我希望能够检测并处理断开连接,然后在必要时重新连接新客户端。 检测客户端断开连接,关闭套接字,然后接受新客户端的正确步骤是什么?

WARN / ActivityManager(78):启动超时已过期,放弃唤醒锁定! – >这是什么

正如标题所示,我在运行我的小应用程序时遇到了这个“错误”: WARN/ActivityManager(78): Launch timeout has expired, giving up wake lock! 在我将此行添加到我的清单文件之后: 我添加该行的原因是为了让我的应用程序能够连接到serversocket。 在另一个论坛上阅读该行将解决我的问题(无法连接)。 它可能有,但我得到了另一个错误。 我对android很新,所以不了解那些特定于android的东西。 但是有一些Java经验。 任何帮助赞赏(: 顺便说一句:不确定我是否应该发布一些代码?

通过telnet发送数据而无需按Enter键

我最近开始搞乱Java套接字和telnet …… 我希望用户能够连接到服务器,只需键入一个字母并将其发送到服务器,而无需按Enter键发送它。 我确定服务器没有办法设置它,但也许telnet有一个参数或什么可以允许这个? 也许如果我让用户在运行telnet之前键入stty cbreak或stty raw ,这可行吗? (仅限UNIX,我知道!) 如果我可以通过telnet来执行此操作,那么我将不得不为此function编写一个特殊的客户端…

sockets如何连接和关闭?

我正在使用Java套接字客户端。 在服务器仍然连接到我的客户端但它没有发送响应我的消息的情况下 – 我最终得到一个读取超时exception。 在这种情况下,我想测试是否应该重新连接我的套接字或只是让它重新使用它。 我用这个条件: if (!socket.isConnected() || socket.isClosed() || !socket.isBound()) { try { socket.close(); } catch (IOException e1) { } // Wait on a new connection socket = connectSocket(…..); } 但我似乎总是重新联系。 当我记录布尔属性的值时,我看到: connected:true closed:true bound:true 如何连接和关闭? TIA

Java套接字和丢弃的连接

检测套接字是否被丢弃的最合适方法是什么? 或者是否确实发送了数据包? 我有一个库,可以通过Apple gatways( 在GitHub上提供 )向Apple发送Apple推送通知。 客户端需要打开套接字并发送每条消息的二进制表示; 但不幸的是,Apple没有任何回复。 连接可以重复使用以发送多条消息。 我正在使用简单的Java Socket连接。 相关代码是: Socket socket = socket(); // returns an reused open socket, or a new one socket.getOutputStream().write(m.marshall()); socket.getOutputStream().flush(); logger.debug(“Message \”{}\” sent”, m); 在某些情况下,如果在发送消息时或之前删除了连接; Socket.getOutputStream().write()成功完成。 我预计这是由于TCP窗口尚未耗尽。 有没有办法可以确定数据包是否实际进入网络? 我尝试了以下两种解决方案: 插入额外的socket.getInputStream().read()操作,超时250ms。 这会强制在删除连接时失败的读取操作,否则会挂起250ms。 将TCP发送缓冲区大小(例如Socket.setSendBufferSize() )设置为消息二进制大小。 这两种方法都有效,但它们会严重降低服务质量; 吞吐量最多从100条消息/秒到大约10条消息/秒。 有什么建议么? 更新: 受到多个答案的质疑,质疑所描述的可能性。 我构建了我所描述的行为的“单元”测试。 查看Gist 273786的单元案例。 两个unit testing都有两个线程,一个服务器和一个客户端。 客户端发送数据时服务器关闭,而不会抛出IOException。 这是主要方法: public static […]

是否可以在同一台机器上运行套接字服务器和套接字客户端?

在java中,可以创建套接字服务器和套接字客户端,是否可以运行套接字服务器的实例,以及从同一台机器上的套接字服务器接收数据的套接字/服务器客户端? 例如,套接字服务器在端口60010上运行,套接字客户端在通过套接字连接到该端口的同一台机器上运行,或者我需要通过新机器将其添加到我的网络中? 如果它在TCP / IP层上运行唯一的IP地址和端口号。

套接字发送和接收字节数组

在服务器中,我通过Java套接字向客户端发送了一个字节数组 byte[] message = … ; DataOutputStream dout = new DataOutputStream(client.getOutputStream()); dout.write(message); 如何从客户端接收此字节数组?