Tag: 套接字

Java中的OutputStream是阻塞的吗? (sockets)

我目前正在为一个项目编写天真的网络代码,并且一位伙伴暗示我有可能当我以一种迭代的方式从服务器向所有客户端发送信息包时,当其中一个客户端没有正确响应时,我可能会遇到严重的延迟。 他因拖钓而闻名,所以当我实现一个现在负责将数据发送到客户端的辅助线程时,我有点怀疑,它有一个队列,服务器只是将数据包添加到那个然后被线程读取以发送数据。 在考虑它之后我现在的问题是天气与否,Java Socket的OutputStream实际上将他想要发送的东西排队,因此事先不需要队列。 只有当客户端没有收到来自客户端的已收到发送对象的响应时,才会出现发生严重问题的可能性。 谢谢。

Java:BufferedReader的readLine方法的效率和可能的替代方案

我们正在努力减少延迟并提高用Java编写的进程的性能,该进程通过BufferedReader类的readLine()方法从套接字使用数据(xml字符串)。 数据由行结束分隔符(\ n)分隔,每行可以是可变长度(6KBits – 32KBits)。 我们的代码如下: Socket sock = connection; InputStream in = sock.getInputStream(); BufferedReader inputReader = new BufferedReader(new InputStreamReader(in)); … do { String input = inputReader.readLine(); // Executor call to parse the input thread in a seperate thread }while(true) 所以我有几个问题: inputReader.readLine()方法一旦命中\ n字符就会返回,还是等到缓冲区满了? 从使用BufferedReader获取套接字数据的速度是否更快? 当输入字符串的大小小于Socket接收缓冲区的大小时会发生什么? 当输入字符串的大小大于Socket接收缓冲区的大小时会发生什么? 我正在使用Java的IO库(慢慢地)掌握,所以任何指针都非常受欢迎。 谢谢!

如何避免使用Java ServerSocket阻塞?

我正在研究一个套接字监听器,它必须在2个端口上侦听2种类型的数据(端口80和端口81)。 这些数据与对数据执行的操作类型非常相似,只是因为它们到达不同的端口而不同。 我继续使用Java的ServerSocket类编写了一个实现,但后来才意识到ServerSocket类的accept()方法是块,我的实现无法承受。 所以现在我正在考虑使用Java NIO实现相同的function,但在完成了一些教程之后,我认为我比我的开始更困惑。 如果这里的某个人可以引导我完成整个过程,即使它是伪代码或技术“下一步该做什么”,那将是很棒的。 这就是我打算实现的目标。 通过调用2个类似的线程来监听,就像永远在2个端口上一样。(非阻塞)来自某个网​​络位置的远程设备连接,发送数据然后断开连接。 我想如果只知道如何使用NIO来设置服务器来监听端口,那么就可以实现localhost上的端口80,其余部分都很容易实现。 干杯

将文件从Python服务器发送到Java客户端

我试图通过TCP套接字将文件从Python服务器发送到Java客户端。 这是我到目前为止: Java客户端(请注意,所有文件传输代码都在getFile()方法中): public class Client1 { private Socket socket = null; private FileOutputStream fos = null; private DataInputStream din = null; private PrintStream pout = null; private Scanner scan = null; public Client1(InetAddress address, int port) throws IOException { System.out.println(“Initializing Client”); socket = new Socket(address, port); scan = new Scanner(System.in); din = new DataInputStream(socket.getInputStream()); […]

从套接字创建密码流时应用程序死锁

我在两个套接字之间加密和解密我的流时遇到问题。 ObjectInputStream oIn = new ObjectInputStream(new FileInputStream(new File(“key”))); SecretKeySpec spec = (SecretKeySpec) oIn.readObject(); //’key’ file was saved previously Cipher cEncrypt = Cipher.getInstance(“AES”); cEncrypt.init(Cipher.ENCRYPT_MODE, spec); Cipher cDecrypt = Cipher.getInstance(“AES”); cDecrypt.init(Cipher.DECRYPT_MODE, spec); //should have no problems here, I tried the ciphers out by encoding and decoding a String, works fine ObjectOutputStream objectOutputStream= new ObjectOutputStream(new CipherOutputStream(socket.getOutputStream,cEncrypt)); objectOutputStream.flush(); ObjectInputStream […]

Java维护持久的TCP连接

我试图使用TCP从服务器向客户端发送多个数据。 我想为整个会话只创建一个TCP连接。 我该怎么做呢? 我尝试了以下流程的代码,但程序在收到第一个响应后停止。 客户端 1.create sockets and streams 2.send request for first data 3.wait for response from server 4.send next request <———– server doesn't seem to handle this request 5.get next response from server 服务器端 1.Create server socket and wait for incoming connections 2.Parse incoming request 3.Send response 4.Parse next request 5.Send next response […]

Android上两个应用程序之间的套接字通信

我的Android应用程序存在很大问题,我想请求您的帮助。 我目前正在使用套接字编写Android Clietn-Server应用程序。 我在互联网上找到了很多辅导员,从中我已经为我的项目创建了基础知识。 但是,所有教程仅适用于一个消息发送,这就是全部。 我需要发送更多它们,所以我一直在尝试修改它。 这是负责服务器和客户端的代码片段。 其余的在这个时候并不重要。 服务器: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); serverStatus = (TextView) findViewById(R.id.server_status); recivedMsg = (TextView)findViewById(R.id.rec_msg); SERVERIP = getLocalIpAddress(); Thread fst = new Thread(new ServerThread()); fst.start(); } public class ServerThread implements Runnable { public void run() { try { if (SERVERIP != null) { handler.post(new Runnable() { […]

保持Java套接字打开?

我正在制作一个会自动更新的程序/游戏。 我有更新部分,但没有检查版本。 我本以为这很容易。 inheritance人我做了什么。 我为游戏写了一个更新程序,我写了一个服务器。 每次客户端/更新程序连接时,服务器都会启动一个线程。 线程处理一切。 游戏更新程序读取名为version.txt的文件,并提供版本号(默认为0.0.1)并将其发送到服务器。 服务器确实接收了版本,并将System.out.println(); 如果版本匹配,如果我更改版本,它会更改输出。 这部分有效。 但就目前而言。 该过程的第二部分是服务器然后只发送一个名为NPS Game.txt的文本文件(它发送任何内容,但txt很容易测试),客户端用新的版本替换旧版本的文件发送。 问题是我一直收到一个错误,说Socket已关闭。 我尝试过使用socket.setKeepAlive(true); 但这并没有改变任何东西(我把它放在客户端和服务器上)。 这是代码: 服务器: package main; import java.io.*; import java.net.*; import javax.swing.JOptionPane; public class Server { static ServerSocket serverSocket = null; static Socket clientSocket = null; static boolean listening = true; public static void main(String[] args) throws IOException { try […]

带插槽的Java单实例软件。 在Windows下关闭套接字的问题

我需要强制我的Java应用程序使用单个实例运行。 我在这个链接上找到了这段非常好的代码,它使用套接字而不是使用文件系统来解决问题。 在这里我调整: package cern.ieplc.controller; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import org.apache.log4j.Logger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; public class ApplicationInstanceManager { public interface ApplicationInstanceListener { public void newInstanceCreated(); } private static final Logger log = Logger.getLogger(CustomLock.class); private static ApplicationInstanceListener subListener; /** Randomly chosen, but static, high socket […]

如何使用套接字ping IP并通过它发送数据?

如何使用套接字程序ping IP地址并通过它发送数据?