Tag: tcp

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进行比较,那将会非常棒。 谢谢

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

Java Server – 多个端口?

我即将编程服务器,但我想知道我的想法是否可行。 我的程序将输出到多个端口上的多个客户端 – 每个端口可以被多个客户端访问。 通常我会使用线程套接字服务器,但在这种情况下我需要它为多个端口工作。 我想到的用法是在下面的模糊伪代码中: 启动服务器 侦听多个端口上的传入连接 识别要连接的端口 如果是端口1,则启动一个侦听客户端的线程并输出消息类型x 如果是端口2,则启动一个侦听客户端的线程并输出消息类型y 希望这有点意义,你可以看到我正在尝试做什么。 简单地说:听取选定的端口,根据连接的端口创建一个线程套接字连接。 这是可行的,还是我要结束multithreading线程套接字服务器? 编辑:更改措辞以更好地反映问题。

如何使用Java将自定义数据写入TCP包头选项字段?

正如它所定义的那样(参见: http : //www.freesoft.org/CIE/Course/Section4/8.htm ),TCP标题有一个“选项”字段。 已经定义了几个选项(参见:www.iana.org/assignments/tcp-parameters/),但我想提出我自己的选项。 (用于实验/研究。) 如何让Java将一些自定义数据写入(然后读取)到选项字段? 奖金问题:如果用Java无法完成。 什么样的应用程序可以做到这一点? (不,我真的不想搞乱一些内核级TCP / IP堆栈实现,我想保持它的应用程序级别。) 谢谢!

Java高负载NIO TCP服务器

作为我研究的一部分,我正在用Java编写一个高负载的TCP / IP echo服务器。 我想为大约3-4k的客户端提供服务,并且每秒可以看到我可以挤出的最大可能消息。 消息大小非常小 – 最多100个字节。 这项工作没有任何实际意义 – 只是一项研究。 根据我见过的众多演讲(HornetQ基准测试,LMAX Disruptor会谈等),真实世界的高负载系统往往每秒服务数百万次交易(我相信Disruptor提到大约6密尔和大黄蜂 – 8.5)。 例如, 这篇文章指出可以达到高达40M MPS。 所以我把它作为现代硬件应该具备的粗略估计。 我编写了最简单的单线程NIO服务器并启动了负载测试。 我很惊讶我在本地主机上只能获得大约10万MPS,在实际网络上只能获得25k MPS。 数字看起来很小。 我正在测试Win7 x64,核心i7。 查看CPU负载 – 只有一个核心正忙(在单线程应用程序上预期),而其余核心处于空闲状态。 然而,即使我加载了所有8个核心(包括虚拟),我的MPS也不会超过800k – 甚至不到接近4千万:) 我的问题是:向客户提供大量消息的典型模式是什么? 我应该在单个JVM内的几个不同套接字上分配网络负载,并使用某种负载均衡器(如HAProxy)将负载分配到多个内核吗? 或者我应该考虑在我的NIO代码中使用多个选择器? 或者甚至可能在多个JVM之间分配负载并使用Chronicle在它们之间建立进程间通信? 在像CentOS这样适当的服务器端操作系统上进行测试会产生很大的不同(可能是Windows会降低速度)吗? 下面是我的服务器的示例代码。 对于任何传入的数据,它总是以“ok”回答。 我知道在现实世界中,我需要跟踪消息的大小,并准备好一条消息可能在多次读取之间分配,但是我现在想让事情变得非常简单。 public class EchoServer { private static final int BUFFER_SIZE = 1024; private final static int DEFAULT_PORT […]

Java tcp只能检索一次图像

我正在制作一个从tcp服务器捕获屏幕截图的程序。 它工作,但在一个屏幕截图后我得到这个错误: java.lang.IllegalArgumentException: image == null! 。 另外我怎么能让我的tcp客户端和服务器代码更健壮,因为这是我的第一个tcp项目所以我知道我的代码非常糟糕。 这是我的代码: 客户 package me.sanchixx.sss.client; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; import java.io.File; import java.net.Socket; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.KeyStroke; @SuppressWarnings(“serial”) public class Interface extends JFrame implements ActionListener { JPanel container […]

java.net.SocketException:socket关闭TCP客户端服务器通信

我正在通过TCP创建一个java客户端/服务器应用程序,我们有两个套接字: 一个是交换消息。 二是文件传输。 我在Server中创建了两个ServerSockets以创建Socket One和Two 通过接受ServerSockets。 起初,客户端通过第一个Socket发送一些字节 这样它就可以告诉服务器它需要哪个文件。 然后,服务器通过第二个套接字将文件发送到客户端。 客户端收到文件后,尝试向服务器发送一个Transfer Done Message。 在那里我得到了关闭套接字的exception。 但是我直到现在才关闭套接字。 我只关闭发送文件的缓冲区。 即使我在发送文件后尝试再次打开socketInputStream,错误仍然是相同的。 此外,如果我不关闭发送文件的缓冲区,客户端将无法获取该文件。 服务器exception 返回消息中的错误 – java.net.SocketException:socket已关闭 客户端例外 服务器响应 – java.net.SocketException:软件导致连接中止:套接字写入错误 我究竟做错了什么?

使用AsyncTask进行android网络连接

我在使用AsyncTask时遇到了一些麻烦,因为我之前从未遇到过它并且不知道我在做什么。 基本上我得到一个力量关闭,因为我试图在主类上运行连接。 有人可能会帮助我在代码中添加AsyncTask : 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.content.Intent; import android.os.Bundle; import android.view.View; public class IPControl extends Activity { private Socket socket; private String serverIpAddress; private static final int REDIRECTED_SERVERPORT = 32; public PrintWriter out; public […]

如何检查Socket目前是否以Java连接?

我试图找出Java TCP套接字当前是否已连接,以下似乎只是告诉我套接字是否已在某些时候连接 – 而不是它当前是否仍然连接。 socket.isConnected(); 任何帮助表示感谢,谢谢。

Java TCP套接字:数据传输速度很慢

我设置了一个带有ServerSocket的服务器,用客户机连接到它。 它们通过交换机直接联网,ping时间<1ms。 现在,我尝试通过套接字的输出流将“大量”数据从客户端推送到服务器。 转移0.6Gb需要23分钟。 我可以通过scp在几秒钟内推送一个更大的文件。 知道我可能做错了什么吗? 我基本上只是循环并在套接字上调用writeInt。 速度问题与数据的来源无关,即使我只是发送一个恒定的整数而不是从磁盘读取。 我尝试将两侧的发送和接收缓冲区设置为4Mb,没有骰子。 我为读写器使用缓冲流,没有骰子。 我错过了什么吗? 编辑:代码 这是我制作套接字的地方 System.out.println(“Connecting to ” + hostname); serverAddr = InetAddress.getByName(hostname); // connect and wait for port assignment Socket initialSock = new Socket(); initialSock.connect(new InetSocketAddress(serverAddr, LDAMaster.LDA_MASTER_PORT)); int newPort = LDAHelper.readConnectionForwardPacket(new DataInputStream(initialSock.getInputStream())); initialSock.close(); initialSock = null; System.out.println(“Forwarded to ” + newPort); // got my new port, […]