Tag: 套接字

从Java中的ObjectInputStream连续读取对象

我在使用ObjectInputStream时遇到了问题,现在我已经苦苦挣扎了2天。 我试图寻找解决方案,但遗憾的是找不到合适的答案。 我正在尝试编写客户端/服务器应用程序,其中客户端将对象(在本例中为配置类)发送到服务器。 这个想法是在发送对象之后连接保持活动,因此可以在必要时发送新对象。 以下是我的客户端代码的重要部分: mSocket = new Socket(“192.168.43.56”, 1234); mObjectIn = new ObjectInputStream(mSocket.getInputStream()); mObjectOut = new ObjectOutputStream(mSocket.getOutputStream()); mObjectOut.writeObject(stubConfig); mObjectOut.flush(); 在上面的代码中,我省略了一些try / catch块以保证代码对您可读。 服务器端看起来如下: mHostServer = new ServerSocket(port); mSocket = mHostServer.accept(); // create streams in reverse oreder mObjectOut = new ObjectOutputStream(mConnection.getOutputStream()); mObjectOut.flush(); mObjectIn = new ObjectInputStream(mConnection.getInputStream()); while (mIsSocketConnected) { StubConfig = (StubConfiguration)mObjectIn.readObject(); } 我想要实现的是,只要socketconnection处于活动状态,服务器就会监听传入的配置对象。 然而,当我运行我的程序时,我在服务器端的while循环中得到了一个EOFException。 […]

如何在java中使用套接字在文件传输程序中包含进度条

我正在研究java中的一个项目,它将文件从客户端传输到服务器。 现在我需要显示每个文件传输的进度条,即每次传输开始时进度条应自动弹出。 我已经使程序创建进度条,但我无法将其与客户端 – 服务器程序合并。 如果有人帮我使用循环,我真的很感激。 谢谢。 ClientMain.java public class ClientMain { private DirectoryTxr transmitter = null; Socket clientSocket = null; private boolean connectedStatus = false; private String ipAddress; String srcPath = null; String dstPath = “”; public ClientMain() { } public void setIpAddress(String ip) { this.ipAddress = ip; } public void setSrcPath(String path) { […]

ObjectInputStream / ObjectOutputStream工作不对

我有类:Client,Server和Background正在使用Player类。 我真的不明白为什么带有ObjectInputStream / ObjectOutputStream Client类无法正常工作。 我做得不好? 哪里是我的错? package Shooter2Dv27082013; public class Player implements Serializable{ …. public int x=10; public int y=10; …. } package Shooter2Dv27082013; public class Background extends JPanel implements ActionListener, Serializable { public int countCollisions=0; private int time = 20; // 0.02s Timer mainTimer = new Timer(time, this); …. Player p = new […]

如果20多年没有活动,tomcat会超时吗?

如果我设置tomcat并从中流式传输静态文件,我注意到如果客户端从该套接字“暂停”(停止接收)任何大于20秒的事情,那么tomcat似乎“任意”“断开”连接(即使需要URI已收到线路,并且连接仍然“已连接”[客户端仍处于活动状态])。 什么配置参数控制这个? 文档提到了connectionTimeout但只是连接到初始头解析和读取请求体,而不是读取服务器的响应[?]这里是否存在某种不活动超时? 它是可重现的,从任何tomcat应用程序流式传输(大)静态文件,并通过暂停的客户端接收它,ex test.rb: require “socket” host = “localhost” port = 8080 socket = TCPSocket.new host,port url = “/your_webapp/large_static_filename.ext” request = “GET #{url} HTTP/1.0\r\nHost:#{host}\r\n\r\n” socket.print request puts “reading” response = socket.sysread 1_000_000 puts response.length puts response[0..300] puts “sleeping 25” # with 10s or several reads separated by 10s, it is OK sleep 25 response2 […]

Java HttpURLConnection和pooling

在阅读了Java HttpURLConnection上的各种文档之后,我仍然感到很困惑,因为它有什么样的集合以及如何处理连接。 例如,以下代码 URL url = new URL(someUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); OutputStream os = connection.getOutputStream(); InputStream is = connection.getInputStream(); /** Write something to os and flush */ /** Read from is */ os.close(); is.close(); connection.disconnect(); 是否需要刷新和关闭以使底层套接字可重用? connection.disconnect()关闭底层套接字(从而使其无法使用)吗? keep-alive会影响这种行为吗? 如果我使用不同的URL对象,但使用相同的URL,那么从它们创建的connection是否会共享底层套接字? 如果URL的主机部分相同但路径不同,该怎么办? 什么时候汇集连接会被破坏? 什么是控制池大小的系统属性? 此外,如果您还可以将Android版本与Java进行比较,那将会非常棒。 谢谢

如何获取客户端IP地址?

我想知道如何在socket(java)中知道服务器端客户端的IP地址。 假设有一个服务器“S”和2个客户端“A”和“B”。 客户端A向我(服务器)发送一些信息,客户端B向我(服务器)发送一些其他信息。 我必须将来自A和B的信息存储在不同表中的数据库中。 如何区分客户端A和B请求。

android tcp / ip socket不会将数据发送到计算机

我试图创建一个从android发送数据到计算机(java到vb.net)的应用程序。 数据发送工作在eclipse java项目中,但不在android项目中。 但我有一个问题。 在我的电脑中没有输入到visual basic的数据。 VB代码: Imports System.Net.Sockets Imports System.Threading Imports System.IO Public Class Form1 Dim Listener As New TcpListener(65535) Dim Client As New TcpClient Dim Message As String = “” Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim ListThread As New Thread(New ThreadStart(AddressOf Listening)) ListThread.Start() End Sub Private […]

我怎么能在一个线程中停止块方法DatagramSocket.receive()

我在主线程中创建一个DatagramSocket ,然后创建一个内部类线程来监听端口。 当我在主线程中关闭DatagramSocket时,它总是遇到一个错误的socket closed因为在内部类线程中我调用了receive()方法,并且它阻塞了内部类线程。 这是内部类的代码: class ReceiveText extends Thread { @Override public void run() { while(true) { byte[] buffer = new byte[1024]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); try { udpSocket.receive(dp);//blocked here byte[] data = dp.getData(); String message = new String(data, 0 , dp.getLength()); setTxtAreaShowMessage(message); } catch (IOException e) { e.printStackTrace(); } } } } […]

java.net.SocketException:软件导致连接中止:recv失败,java.net.SocketException:连接重置

我在Netbeans IDE中的Java,Hibernate,MySQL项目中遇到exception。 我已经做了一些挖掘尝试修复这个奇怪的Socketexception,但无济于事。 一些论坛解决方案建议为Hibernate实现c3p0连接池。 没有修复。 其他人建议禁用AV和防火墙(!!),因为这些可能会干扰套接字连接。 没有修复。 我用Hibernate标记了这个问题,因为我不确定hibernate是什么原因,但Hibernate调用(运行查询)会发生exception。 应用程序中的其他Hibernate代码工作正常。 Hibernate版本是3.2。 例外: NotifyUtil::java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2676) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at org.netbeans.modules.web.monitor.server.NotifyUtil$RecordSender.run(NotifyUtil.java:299) 此exception可能发生一次或几次,之后不会发生此exception: NotifyUtil::java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) […]

JAVA:处理sockets断开连接

两台计算机通过套接字连接。 如果服务器/客户端从它们的末端关闭连接(即关闭InputStream , OutputStream和Socket ),那么如何通知另一端断开连接? 我知道有一种方法 – 尝试从InputStream读取,如果连接关闭则抛出IOException ,但有没有其他方法可以检测到这种情况? 另一个问题,我在互联网上看了问题,看到inputStream.available()没有解决这个问题。 这是为什么? 附加信息:我要求另一种方式,因为如果我必须尝试从InputStrem读取以检测断开连接,我的项目将变得难以处理。