Tag: 套接字

停止ServerSocket accept()循环线程

我正在实现一个非常基本的API来更好地控制ServerSocket和Sockets,但是由于我缺乏线程知识,我处理的是一个非常奇怪的问题。 让我解释一下。 在我的类SocketStreamReceiver中,我使用辅助线程来监听带有ServerSocket#accept()新套接字。 有两种方法:start()和stop()客户端可以用来启动(创建一个线程并开始用accept()监听)并停止(关闭ServerSocket并销毁线程)我的SocketStreamReceiver。 你将如何实现stop()方法? 请记住,stop()可以在doSomething()内部调用,在start()启动的同一个辅助线程中。 您可以更改任何所需内容:如果需要,可以在线程内创建ServerSocket,就在while(运行)之前。 public class SocketStreamReceiver{ … private Thread thread; private ServerSocket server; private boolean running; … public void start () throws IOException{ if (thread != null) return; server = new ServerSocket (port); thread = new Thread (new Runnable (){ @Override public void run (){ try{ while (running){ Socket socket = […]

Java:使用TCP套接字的简单http GET请求

我在本地托管一个简单的PHP echo服务器。 我试图用Java向服务器发送消息,并使用GET请求打印响应但是收到“格式错误的HTTP请求”错误。 谁能告诉我如何正确格式化GET请求? //客户代码: import java.io.*; import java.net.*; public class TCPclient { public static void main(String argv[]) throws Exception { String sentence, modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket(“localhost”, 8000); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + “\n”); outToServer.writeChars(“GET /echo.php […]

使用线程处理套接字

我正在开发一个基本上是聊天室的java程序。 这是一个课程的分配,所以没有代码请,我只是有一些问题确定最可行的方式来处理我需要做的事情。 我已经为单个客户端设置了一个服务器程序,使用线程获取数据输入流和一个线程来处理数据输出流上的发送。 我现在需要做的是为每个传入请求创建一个新线程。 我的想法是创建一个链表来包含客户端套接字,或者可能包含线程。 我磕磕绊绊的地方是弄清楚如何处理将消息发送给所有客户。 如果我为每个传入消息都有一个线程,那么我该如何转身并将其发送到每个客户端套接字。 我想如果我有一个客户端套件的链表,那么我可以遍历列表并将其发送给每个,但是每次我都必须创建一个dataoutputstream。 我可以创建dataoutputstream的链接列表吗? 对不起,如果它听起来像我在漫无目的,但我不想只是开始编码,如果没有一个好的计划,它可能会变得混乱。 谢谢! 编辑我决定发布我到目前为止的代码。 我还没有机会测试它,所以任何评论都会很棒。 谢谢! import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.ServerSocket; import java.util.LinkedList; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class prog4_server { // A Queue of Strings used to hold out bound Messages // It blocks till on is available static […]

在Android中的蓝牙连接期间,不会创建连接(失败或中止)exception

我正在开发一个项目,它使用一个在4.1.2上运行的安卓平板电脑(iball 3G 7271),由MTK处理器和一个RN42蓝牙(PCB上的芯片)组成。这两个模块相互通信以进行传输他们之间的数据通过蓝牙。 我正面临着一些问题。在某些情况下,我反复得到exception,说明“连接未创建(失败或中止)”。我已经找到了如下所述的实例: 我从BlueTerm应用程序(来自playstore)复制了相关代码并制作了一个示例应用程序来测试BT连接.Blueterm是一个测试设备和RN42之间蓝牙连接的应用程序。 1)我将应用程序连接/断开连接到RN42,发现它一直在工作。正在进行正确的连接和断开连接。 2)I模拟电源故障(仅通过关闭RN42模块),然后断开并重新连接app和RN42之间的BT连接,发现平板电脑与RN42重新连接没有太多问题。 3) 重新安装应用程序和BT连接到RN42之间的链接 测试案例1:在重新安装之前,应用程序与RN42断开连接; 结果 – 重新安装后BT重新连接到重新安装的应用程序中的RN42工作正常。 测试案例2:在重新安装之前,应用程序处于连接状态到RN42;结果 – 重新安装后BT重新连接到RN42没有发生。 我追溯到测试案例2的exception是: W/System.err(4603): java.io.IOException: [JSR82] connect: Connection is not created (failed or aborted). W/System.err(4603): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:395) 这是我几天前一次又一次地得到的例外。所以现在我知道什么时候可以抛出这个exception。 注意:对于’测试用例2’,这里甚至卸载并重新安装应用程序然后尝试将应用程序连接到RN42也无法正常工作。我们需要重新启动平板电脑以使应用程序再次连接到BT。此外,我甚至尝试过连接真正的BlueTerm应用程序(在测试用例2中),但它也没有连接。所以我尝试关闭并打开平板电脑的BT.I观察到通过关闭然后打开BT然后尝试建立BT平板电脑和RN42之间的连接正在发生。但是现在,我没有从RN42到平板电脑获得任何输入信号,但是能够将数据从平板电脑发送到RN42。 在三星S2 / grand / nexus设备上进行测试:对于上述测试用例2,在重新安装后,应用程序确实连接到BT,即使在重新安装之前已经/未通过BT连接到RN42。 以下是我的应用程序的代码和日志猫exception: BlueTerm.java @SuppressLint(“HandlerLeak”) public class BlueTerm extends Activity { BluetoothSocket Socket; OutputStream DataOut; InputStream DataIn; // Intent […]

TCP连接的可靠性如何?

我已经写了服务器客户端application.Server用c#编写,客户端代码用java编写。通信协议是TCP。 使用tcp传输文件时,可以发送丢失的数据。 换句话说,tcp保证数据正确到达。(我应该发送此文件的头信息以检查错误,如文件大小,哈希等)

套接字问题 – readline无法正常工作

我尝试使用套接字编写客户端和服务器连接。 问题是我的客户端无法从服务器读取响应(它挂在readline上)。 这是一些代码。 服务器: try { // Create the server socket. portNumber = Integer.parseInt(myParam.get(“socket.portNumber”)); System.out.println(portNumber); mainSocket = new ServerSocket(portNumber); } catch (IOException ioe) { System.out.println(“Error Message : “+ioe.getMessage()); } while(true) { try { // Accept connections Socket clientSocket = mainSocket.accept(); SocketServerThread st = new SocketServerThread (clientSocket); st.start(); } catch(IOException ioe) { System.out.println(“Error message :”+ioe.getMessage()); } […]

Java – 无法与ServerSocket连接

我试图使用ServerSocket与端口2649,其他人无法连​​接。 它适用于localhost。 这是人们在尝试连接时遇到的错误: Exception in thread “main” java.net.ConnectException: Connection timed out: connect at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.(Unknown Source) at java.net.Socket.(Unknown Source) at Client.main(Client.java:11) 我有端口转发,我的计算机上没有激活防火墙。 以下是端口转发时使用的设置。 http://sofzh.miximages.com/java/NLdaA.png http://sofzh.miximages.com/java/FJpJQ.png 当我在canyouseeme.org上检查端口2649时,它说连接超时了。 我也在使用Windows XP。 任何帮助表示赞赏。 谢谢 编辑:这是我正在使用的代码 import […]

SocketException:尝试从Java中读取套接字时连接重置?

在使用Java套接字时遇到了一些烦恼,我的应用程序似乎在一个非常基本的层面上失败了。 我的部分应用程序需要跨TCP连接编写文件名。 接收者代码如下: ServerSocket serverSocket = new ServerSocket(4445); Socket socket = serverSocket.accept(); BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); String filename = reader.readLine(); 我的发件人代码如下: Socket socket = new Socket(InetAddress.getLocalHost(), 4445); PrintWriter writer = new PrintWriter(socket.getOutputStream()); writer.write(“Test.jpg”); 非常非常基本的东西,但由于某种原因,我得到一个SocketException:连接重置当我运行它? 这是完整的堆栈跟踪: Exception in thread “main” java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at […]

Java套接字:重试Connection Refusedexception的最佳方法?

现在我这样做: while (true) { try { SocketAddress sockaddr = new InetSocketAddress(ivDestIP, ivDestPort); downloadSock = new Socket(); downloadSock.connect(sockaddr); this.oos = new ObjectOutputStream(downloadSock.getOutputStream()); this.ois = new ObjectInputStream(downloadSock.getInputStream()); break; } catch (Exception e) {} } 如果远程主机没有在套接字上侦听, downloadSock.connect(sockaddr)将生成ConnectionRefusedexception。 我在一个单独的线程中运行我的代码,所以我不担心阻塞。 鉴于此,我的重试方法是否适当或是否有更好的方法? 谢谢!

Commons Net FTPClient与Mule无限期挂起

我遇到了Mule ESB FTP传输的问题:轮询时,运行客户端的线程将无限期挂起而不会抛出错误。 这会导致FTP轮询完全停止。 Mule使用Apache Commons Net FTPClient。 进一步研究代码,我认为这是由FTPClient的SocketTimeout没有设置引起的,有时候在从FTPClient的套接字读取行时会导致无限挂起。 当问题发生时,我们可以清楚地看到用jstack检索到的这些堆栈中的问题。 __getReply()函数似乎是问题的更直接链接。 这个在创建新的FTPClient时挂在connect()调用上: receiver.172 prio=10 tid=0x00007f23e43c8800 nid=0x2d5 runnable [0x00007f24c32f1000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStream.java:122) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) – locked (a java.io.InputStreamReader) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:154) at java.io.BufferedReader.readLine(BufferedReader.java:317) – locked (a java.io.InputStreamReader) at java.io.BufferedReader.readLine(BufferedReader.java:382) at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294) at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:364) at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:540) […]