Tag: 套接字

Android将数据从主UI线程发送到另一个线程

我需要将一些数据从主线程发送到另一个线程。 我已经阅读了很多关于线程,asynctasks和处理程序的资料,但也许他们给我带来了一些困惑。 我读到我需要为我的’第二个线程’创建一个Handler,以便我可以从主线程向它发送消息(现在我不担心将任何内容发送回主线程)。 我需要第二个线程连接到服务器(通过套接字)并在某些用户事件上发送一些日期。 我试图以有效的方式(不要打开/关闭不必要的套接字连接)。 所以我想知道我应该在哪里打开socket命令? 此外,在我的处理程序的handleMessage()方法中,我需要对套接字输出流的引用,以便将数据发送到服务器。 我目前有以下代码: protected void initThread(){ this.thread = new HandlerThread(WorkerHandler.class.getCanonicalName()){ @Override public void run() { super.run(); try{ handler = new WorkerHandler(getLooper()); }catch(Exception e){ e.printStackTrace(); } } }; this.thread.start(); } 方法initThread()在我的activity的onCreate()方法中调用。 以下是我的自定义处理程序类的代码: public class WorkerHandler extends Handler { protected Socket socket; protected BufferedWriter writer; public WorkerHandler(Looper looper) throws Exception{ super(looper); this.socket […]

Android设备到PC的套接字连接

我面临着从Android设备到PC的特定端口(如8080建立套接字连接的问题。 我只想创建一个套接字,它将连接到特定端口,并在该端口上写入一些数据流。 我为此目的编写了一些代码,但代码给了我一个例外: TCP Error:java.net.ConnectException:/127.0.0.1:8080-connection refused 我给出的代码如下: private static TextView txtSendStatus; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControls(); String sentence = “TCP Test #1n”; String modifiedSentence; try { Socket clientSocket = new Socket(“192.168.18.116”, 8080); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new […]

我可以关闭并重新打开sockets吗?

我学习了套接字使用的一个例子。 在此示例中,客户端向服务器发送请求以打开套接字然后服务器(侦听特定端口)打开套接字并且一切正常,套接字从双方(客户端和服务器)“打开”。 但我仍然不清楚这些东西有多灵活。 例如,客户端是否可以关闭打开的(从两端)套接字并再次重新打开它(在服务器保持套接字打开的情况下)。 服务器是否可以“知道”客户端上的套接字已关闭? 客户端是否可以知道服务器端的套接字已关闭? 添加: 对我来说更重要的一件事。 如果应用程序(无主服务器或客户端)崩溃,exception终止,被杀,会发生什么? 它会关闭应用程序侧面打开的所有套接字吗? 增加2: 如果套接字一侧的应用程序被关闭(终止,关闭,终止)然后再次打开(在相同的IP地址和相同的端口上),该怎么办? 我们应该在两个应用程序之间创建一个新套接字,还是可以使用旧套接字(在崩溃之前创建)。

将简单的服务器代码部署到Heroku

我最近访问了heroku.com网站,并试图在那里部署我的第一个java程序,我实际上有一个良好的开端使用他们的Java部署教程,并让它运行正常。 现在我有一个服务器代码,我需要在那里部署,我试着按照这个例子,但我有一些问题,如, 1-在这种情况下主机是什么,我已经尝试过应用程序链接,就好像它是主机但是它会抛出错误, 这是我的示例服务器代码 public class DateServer { /** Runs the server. */ public static void main(String[] args) throws IOException { ServerSocket listener = new ServerSocket(6780); try { while (true) { Socket socket = listener.accept(); try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println(new Date().toString()); } finally { socket.close(); } } } finally { listener.close(); […]

如何确保我的HttpClient 4.1不会泄漏套接字?

我的服务器使用来自内部Web服务的数据来构建其响应,基于每个请求。 我正在使用Apache HttpClient 4.1来发出请求。 每个初始请求将导致对Web服务的大约30个请求。 其中,4 – 8最终将插入CLOSE_WAIT中的套接字,而这些套接字永远不会被释放。 最终这些卡住的套接字超过了我的ulimit,我的进程耗尽了文件描述符。 我不想只提高我的ulimit(1024),因为这只会掩盖问题。 我转移到HttpClient的原因是java.net.HttpUrlConnection的行为方式相同。 我已尝试按请求移动到SingleClientConnManager,并在其上调用client.getConnectionManager()。shutdown(),但套接字仍然卡住了。 我是否应该尝试解决这个问题,以便在没有正在运行的请求时最终得到0个开放套接字,或者我应该专注于请求持久性和池化? 为清楚起见,我提供了一些可能相关的细节: 操作系统:Ubuntu 10.10 JRE:1.6.0_22 语言:Scala 2.8 示例代码: val cleaner = Executors.newScheduledThreadPool(1) private val client = { val ssl_ctx = SSLContext.getInstance(“TLS”) val managers = Array[TrustManager](TrustingTrustManager) ssl_ctx.init(null, managers, new java.security.SecureRandom()) val sslSf = new org.apache.http.conn.ssl.SSLSocketFactory(ssl_ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) val schemeRegistry = new SchemeRegistry() schemeRegistry.register(new Scheme(“https”, 443, […]

网络中的端口是什么?

我正在学习java中的网络。我不清楚什么是端口。 另外我需要知道什么是套接字? 请解释一下。

Java:multithreading和UDP套接字编程

我是Java中multithreading和套接字编程的新手。 我想知道实现2个线程的最佳方法是什么 – 一个用于接收套接字,另一个用于发送套接字。 如果我想做的事听起来很荒谬,请告诉我原因! 该代码很大程度上受到Sun在线教程的启发。我想使用多播套接字,以便我可以使用多播组。 class Server extends Thread { static protected MulticastSocket socket = null; protected BufferedReader in = null; public InetAddress group; private static class Receive implements Runnable { public void run() { try { byte[] buf = new byte[256]; DatagramPacket pkt = new DatagramPacket(buf,buf.length); socket.receive(pkt); String received = new String(pkt.getData(),0,pkt.getLength()); System.out.println(“From […]

sockets在1秒内打开和关闭或保持打开状态

我需要定期与plc通信(每1秒),我发送消息,然后收到消息。 我使用Socket类进行此通信。 我是否需要每1秒打开一次连接( socket=new Socket(ipaddress, port) ),发送消息,然后发送socket.close()等,或者一直保持socket操作?

使文件传输更高效Java

我有两台无线电脑连接到N无线路由器。 这些PC中的每一台都以108-150Mbps的速度连接。 从理论上讲,我应该能够在绝对最佳条件下以13.5MB / s的速度传输到18.75MB / s。 第一台计算机(即发送)使用非常快的SSD,如果我没记错的话,大约100MB / s。 CPU使用率也低于20%。 它在656367ms发送了1960273535字节(1.8GB)。 那是2.8MB / s(108兆比特中的22个)。 当我打开任务管理器时,我发现只有25-27%的网络连接被使用。 我正在寻找可以使传输更快(通过网络)的任何想法,建议或改进。 我在考虑从线程上的磁盘缓冲文件并从另一个线程发送缓冲的数据,但我不确定这是不是一个好主意。 这是SSCCE: 主办: import java.io.*; import java.net.*; public class Host { public static void main(String[] args) throws IOException { ServerSocket servsock = new ServerSocket(15064); Socket sock = servsock.accept(); long time = System.currentTimeMillis(); OutputStream out = sock.getOutputStream(); FileInputStream fileInputStream […]

为什么没有收到(UDP组播)数据包?

所以,我一直试图弄清楚为什么这不起作用,但我没有线索。 我已经设法从iPhone发送数据包并在我的Mac上接收它们。 根据tcpdump我的mac正确发送数据包。 另外,如果我在模拟器中运行它,它工作正常。 这让我相信这是一个网络问题,但我不知道那可能是什么,所以我希望(!)它是下面的东西。 CFSocketContext socketContext = {0, self, NULL, NULL, NULL}; advertiseSocket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketDataCallBack, (CFSocketCallBack)&advertiseCallBack, &socketContext); int yes = 1; setsockopt(CFSocketGetNative(advertiseSocket), SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes)); u_char loop = 0; setsockopt(CFSocketGetNative(advertiseSocket), IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); unsigned char ttl = 64; setsockopt(CFSocketGetNative(advertiseSocket), IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); struct sockaddr_in addressData; memset(&addressData, […]