Tag: tcp

使用套接字和AsyncTask强制关闭

你好堆栈的人…. 请在下面查看我的课程代码和我的LogCat … 在尝试连接时,我正在关闭力量。 如果有人能帮助我弄清楚为什么会非常感激。 基本上代码正在做的是: 从意图中获取IP地址。 使用端口32连接到IP 然后发送命令,等待响应并发送另一个命令。 在我发送的2个命令后,我应该得到“SNX_COM>”的响应 建立连接后,我希望连接保持打开状态,以便在按钮单击时发送特定命令。 请帮忙 :) package com.smarte.smartipcontrol; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; public class IPControl extends Activity { private Socket socket; private […]

在Spring集成中,如何捕获不同的exception?

在Spring集成中,我有一个简单的tcp客户端管道:一个网关,一个tcp出站网关,一个服务激活器和一个错误通道。 在tcp-connection-factory中有一个简单的拦截器。 错误通道非常简单,我用这个filter实现了tcp-connection-event-inbound-channel-adapter: org.springframework.integration.ip.tcp.connection.TcpConnectionExceptionEvent。 所以我的error handling程序非常简单,看起来像这样: public class TcpErrorHandler { public void onException(){ System.out.println(“Exception!!! “); } } 它工作,因为当我有一个Socket关闭exception(服务器端我关闭连接),应用程序写“exception!!!” 到了控制台,但另一方面,当我有连接超时exception时,它不起作用。 我的问题是:如何为我获得所有最相关的例外: 运行时套接字关闭exception 连接超时exception 其他例外 有没有捕捉机制? 这是来自我的bean配置的snipet: 这是我的error handling程序: public class TcpErrorHandler { @Autowired private ApplicationContext appContext; public void onException(TcpConnectionExceptionEvent event){ MainService mainService = appContext.getBean(MainService.class); mainService.setSuccess(3); System.out.println(“Exception!!! “); System.out.println(event.getCause().getMessage()); } } 拦截器在这里: public class CustomInterceptor extends TcpConnectionInterceptorSupport{ […]

没有Transformer的Spring TCP客户端

我按照这个例子在Spring中设置TCP客户端。 下面是tcpClientServerDemo-context.xml所在的tcpClientServerDemo-context.xml文件。 有人可以帮我拆除变压器并按原样发送数据而不做任何修改吗? 如果我尝试删除行reply-channel=’clientBytes2StringChannel’或甚至将其reply-channel=’clientBytes2StringChannel’ null,我在构建项目时会遇到exception。 编辑: 现在我可以使用自定义序列化器/解串器发送消息。 但不幸的是,我无法收到回复。 这是我的序列化器/反序列化器: public class CustomSerializerDeserializer implements Serializer, Deserializer { protected final Log logger = LogFactory.getLog(this.getClass()); public void serialize(String input, OutputStream outputStream) throws IOException { logger.info(“inside serialize”); outputStream.write(buildSampleMsg(input)); outputStream.flush(); } public String deserialize(InputStream inputStream) throws IOException { logger.info(“inside deserialize”); final int bufferSize = 1024; final char[] buffer = new […]

使用Jersey客户端重置连接

我在生产中看到很多连接重置。可能有多种原因,但我想确保代码中没有连接泄漏。我在代码中使用Jersey客户端 Client this.client = ApacheHttpClient.create(); client.resource(“/stores/”+storeId).type(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class,indexableStore); 最初我用以下方式实例化客户端客户端this.client = Client.create(),我们将其更改为ApacheHttpClient.create()。 我没有在响应上调用close()但我假设ApacheHttpClient会在内部执行,因为HttpClient executeMethod被调用,它会为我们处理所有的样板。 编写代码的方式是否存在潜在的连接泄漏?

在wifi网络上发现客户端

我正在编写一个java应用程序,我需要在任何有线或无线本地网络上快速发现任何其他正在运行的客户端,以便建立TCP连接。 这样做的最佳方法是什么? 是否有可以执行此操作的库或代码片段?

Java TCP服务器无法从多个客户端接收消息

我想做最简单的解释。 我的Java TCP项目有一个服务器和三个客户端。 服务器有一个ClientThread。 每个客户端都有一个ServerThread和一个UserThread。 工作流程是: 1.客户端的UserThread(例如,client_0)获取用户输入,然后向服务器发送消息。 2.服务器的ClientThread从client_0捕获消息,并将另一条消息发送到另一个客户端(例如client_1)的ServerThread。 3.然后client_1的ServerThread将另一条消息发送回服务器中运行的ClientThread; 步骤3的消息未到达服务器。 总共有3个客户端,比如client_0,client_1和client_2。 最初的想法是,如果client_0请求服务器,则服务器与client_1和client_2通信。 这就是为什么行if(i==cid) continue; 在服务器的for循环中。 但是,如果我注释掉这一行,服务器会与client_0进行通信(这在语义上是不必要的),并且不会发生消息传递问题。 之后,服务器与client_1进行通信,然后再次出现问题。 服务器可以从客户端(client_0)的ServerThread接收消息,该消息从其UserThread发送原始请求( msgToServer.println(“get list”); )以启动整个过程。 但是服务器无法从任何其他客户端的ServerThread获取消息,即使它可以向其他客户端发送消息,并且所有客户端程序都是相同的,并且所有ServerThreads和UserThreads都应该起作用。 怎么可能呢? 服务器: package serverftp; import java.io.*; import java.net.*; public class ServerFTP { static String[] id = {“cp 1″,”cp 2″,”cp 3”}; static String[] pass = {“123″,”456″,”789”}; static BufferedReader[] msgFromClient = new BufferedReader[3]; static PrintWriter[] […]

为什么我的申请没有进入我的if语句

我正在尝试用Java编写控制台客户端 – 服务器应用程序; 使用套接字,我目前有一个简单的登录系统和一个简单的命令系统。 登录系统似乎有效,但无论用户是否输入正确的凭据,它都会向客户端打印“无效的用户名和密码”行。 – 连接肯定有效。 但是,命令系统似乎根本不起作用,当服务器收到命令时,它似乎没有发回任何东西。 所以我的主要问题是为什么我的服务器在收到命令时不会向客户端发送任何内容? 这是我的服务器: import java.io.*; import java.net.*; class TCPServer2 { public static void main(String argv[]) throws Exception { ServerSocket welcomeSocket = new ServerSocket(6789); String[][] Login = {{“MATT”,”UNCP”},{“JOHN”,”UNCP”},{“CARL”,”UNCP”}}; String Command; String username; String username1; String password; String password1; String cmd; while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = […]

一台服务器多个客户端

我遇到以下问题: 我需要编写一个服务器程序,将接受多个客户端 所有客户都从服务器订阅相同的数据,例如股票价格更新。 每个客户端都可以向服务器发送简单的命令,如“登录”,“停止” 所以这是我的解决方案,因为我在multithreading/ tcp中没有经验,我想知道这是一个很好的解决方案吗? 如果没有,有没有更好的解决方案? 是否有必要为每个客户端套接字都有一个线程? 谢谢顺便说一句:抱歉让每个人感到困惑,这是一个只涉及5-10个课程的小项目。 class AcceptThread { …… public void run () { ControlThread controlThread = new ControlThread(); controlThread.start(); Socket socket = new Socket(port); while (!stop) { Socket s = socket.accept(); controlThread.addClient (s); } } } class ControlThread { Set clients; SendDataThread sendDataThread; public ControlThread () { sendDataThread = new […]

我代码中的某个无限循环

我有这个Java游戏服务器,可以处理多达3,000个tcp连接,每个播放器,或者每个tcp连接都有自己的线程,每个线程都是这样的: public void run() { try { String packet = “”; char charCur[] = new char[1]; while(_in.read(charCur, 0, 1)!=-1 && MainServer.isRunning) { if (charCur[0] != ‘\u0000’ && charCur[0] != ‘\n’ && charCur[0] != ‘\r’) { packet += charCur[0]; }else if(!packet.isEmpty()) { parsePlayerPacket(packet); packet = “”; } } kickPlayer(); }catch(IOException e) { kickPlayer(); }catch(Exception e) { […]

通过对等方重置连接:套接字写入错误。 我的Java代码有什么问题

我试图从独立的Java应用程序创建和维护到主机的TCP连接。 本地端口和服务器端口相同= 8999.连接后,我必须向服务器发送一个消息: username=fred&password=abcd 。 套接字创建和消息发送的代码如下: Socket socket = new Socket(“mshxml.abcd.com”, 8999, InetAddress.getLocalHost(), 8999); OutputStream outStream = socket.getOutputStream(); while (socket.isConnected()) { try { int stx = 2, etx = 3; DataOutputStream dout = new DataOutputStream(outStream); dout.writeByte(stx); dout.writeBytes(“username=fred&password=abcd”); dout.writeByte(etx); } catch (Exception e) { e.printStackTrace(); } 但这种联系并不存在。 在调试时,我发现以下错误: java.net.SocketException: Connection reset by peer: socket write error […]