Tag: tcp

TIME_WAIT中的tcp连接将不允许重新连接,java

在与服务器建立TCP连接后,我关闭了我的linux应用程序并调用了Socket.close()。 检查netstat -pant,我看到连接处于TIME_WAIT状态。 这使我无法立即连接回服务器,因为我使用相同的端口进行连接。 相反,我必须等待连接到TIME_WAIT状态的超时,然后才能重新连接。 我用套接字方法玩了很多运气 – set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr() – 这篇文章的确切拼写可能不正确。 我的问题是如何从TIME_WAIT状态获得连接,以便我可以立即重新建立连接? 请告诉我。 谢谢,jbu

在AsyncTask中维护TCP连接

我正在使用AsyncTask建立TCP连接并通过它发送/接收数据。 我目前的代码现在看起来像这样: public class NetworkTask extends AsyncTask { Socket nsocket; //Network Socket InputStream nis; //Network Input Stream OutputStream nos; //Network Output Stream boolean bSocketStarted = false; byte[] buffer = new byte[4096]; @Override protected void onPreExecute() { Log.i(TAG, “onPreExecute”); } @Override protected Boolean doInBackground(Void… params) { //This runs on a different thread boolean result = false; […]

Spring Integration – 可靠的TCP,适用于大批量应用

我正在使用Spring Integration for TCP服务器,它可以连接几千个客户端。 我需要服务器在负载过重的情况下限制客户端并且不丢失消息。 我的服务器配置: 由于连接工厂的默认任务执行程序是无限制的,因此我使用池化任务执行程序来防止内存不足错误。 一个简单的负载测试客户端: public class TCPClientTest { static Socket socket; static List sl = new ArrayList(); static DataOutputStream out; public static void main(String[] args) throws Exception { for (int i = 0; i < 10000; i++) { socket = new Socket("localhost", 60000); sl.add(socket); out = new DataOutputStream(socket.getOutputStream()); out.writeBytes("connection " + […]

Java TCP Echo Server – 广播

我有一个简单的echo服务器,我希望当一个连接的用户向服务器输入任何内容时,所有其他客户端和该客户端将得到一条消息+“| MOD”。 它现在不会发送给所有客户,但它应该,我只是不知道我的代码有什么问题,所以现在它只会将消息+“| MOD”发送给发送消息的客户端,但不会发送给所有其他客户端这应该。 我只是不明白,我有一个遍历所有客户端的循环,但它仍然不会发送给所有客户端。 服务器: package com.murplyx.server; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { public static ServerSocket server; public static ArrayList clients = new ArrayList(); public static void broadcast(String message) { try { for (Socket socket : clients) { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); […]

带有Java Socket服务器的WCF TCP客户端,用于自定义XML消息

我正在尝试为Java Socket服务器构建一个WCF客户端,该服务器讨论自定义XML消息。 我用MessageEncoder和netTCP传输创建了自己的自定义绑定。 现在我所看到的是第一次调用服务器,服务器接受连接。 但是,服务器然后等待特定的XML数据包。 这是内置于客户端的方法接口。 WCF不发送XML数据包。 稍后WCF报告超时exception,并且通道出现故障。 WCF netTCP传输是否仅适用于WCF TCP服务器? 码: [System.CodeDom.Compiler.GeneratedCodeAttribute(“System.ServiceModel”, “3.0.0.0”)] [System.ServiceModel.ServiceContractAttribute(ConfigurationName = “IUserManager”, SessionMode=System.ServiceModel.SessionMode.Required)] public interface IUserManager { [System.ServiceModel.OperationContract] bool SendMessage(string strMessage); [System.ServiceModel.OperationContract(IsInitiating = true, IsOneWay=true)] void SendMessageOneWay(string strMessage); } 我创建了一个SendMessageOneWay来启动Socket连接。 这不起作用。 因为我需要重用套接字,所以我设置了Session.Required。 请帮忙

Android TCP通信速度太慢

我的TCP发送器类是TCPSenderTask作为客户端,我使用TCP服务器的服务。 当我尝试发送数据时,数据传输速度太慢。 我找不到原因。 package com.example.sampletcpclient; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; import com.example.model.Order; import android.content.Context; import android.os.AsyncTask; import android.widget.TextView; class TCPSenderTask extends AsyncTask { Context mContext; TextView tv; BufferedReader reader; PrintWriter writer; Socket socket; ArrayList outgoingOrders; ObjectOutputStream oos; public TCPSenderTask(Context mContext, ArrayList outgoingOrders, TextView tv) { this.mContext = mContext; […]

使用Bonjour获取设备IP

我正在使用Java 6更新14进行开发和NetBeans 6.7。 我正在创建一个示例客户端,以使用Bonjour检测特定类型的服务。 我面临一个特殊的挑战,我想获得设备的IP地址。 但是ResolveListener.serviceResolved(…)函数只提供Hostname和Port。 FullName也不包含设备的IP信息。 是否可以使用Bonjour SDK获取设备的IP地址? 如果有,怎么样? 谢谢。

停止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 […]

TCP连接的可靠性如何?

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