Tag: 套接字

Java套接字,是死锁还是什么?

我有一个客户端服务器程序在服务器端使用套接字,并以这种方式进行读写 soc = serversocket.accept(); System.out.println(“Accepted”); in = new ObjectInputStream(soc.getInputStream()); out = new ObjectOutputStream(soc.getOutputStream()); if(in.readUTF() == null ? ” ” != null : !in.readUTF().equals(” “)) { diskinfo.setPath(in.readUTF()); } Item[] pac = diskinfo.get(); out.writeObject(pac); 同样在cilent(android)方面…… Log.v(“read”, “item”); soc = new Socket(InetAddress.getByName(“10.0.2.2”), 3838); output = new ObjectOutputStream(soc.getOutputStream()); input = new ObjectInputStream(soc.getInputStream()); try { output.writeUTF(path); packets = (Item[]) input.readObject(); […]

Java非阻塞IO选择器导致通道寄存器阻塞

我有两个线程,我正在处理Java NIO的非阻塞套接字。 这是线程正在做的事情: 线程1:调用选择器的select()方法的循环。 如果有任何密钥可用,则会相应地处理它们。 线程2:偶尔通过调用register()将SocketChannel注册到选择器。 问题是,除非select()的超时非常小(比如大约100ms),对register()的调用将无限期地阻塞。 即使通道配置为非阻塞,并且javadocs声明Selector对象是线程安全的(但它的选择键不是,我知道)。 所以任何人都对这个问题有什么看法? 如果我把所有东西都放在一个线程中,该应用程 那时没有问题,但我真的想要有单独的线程。 任何帮助表示赞赏。 我在下面发布了我的示例代码: 将选择(1000)更改为选择(100)并且它将起作用。 保留为select()或select(1000),但不会。 import java.io.IOException; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.util.Iterator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class UDPSocket { private DatagramChannel clientChannel; private String dstHost; private int dstPort; private static Selector recvSelector; private static volatile […]

从浏览器静音打印

我在过去的几天里研究了很多,并在这个问题上给了我足够的支持。 我想要实现的是使用打印按钮直接从网页打印。 我不想浏览器打印弹出窗口出现。 将有2台打印机连接到我的Web应用程序,我想自动选择打印机。 我知道使用PHP或没有任何浏览器扩展或活动x插件是不可能的。 我还想到了一个解决方案,用于在用户系统上安装Java套接字客户端应用程序时使用Web套接字发送打印请求。 请建议我任何时候保存解决我的问题的方法

Android客户端自动查找C#服务器

我的Android客户端正试图在网络中找到C#服务器… 这是程序 : 0.服务器正在侦听UDP数据包 1.客户端发送UDP数据包并开始侦听响应 2.服务器接收UDP数据包,如果客户端发送数据包,则服务器向客户端发送新的UDP数据包 3.客户端接收UDP数据包 C#服务器代码: //receive UDP packet int port = (int)float.Parse(Variables.port_key); UdpClient UDP_receive = new UdpClient(port); IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); IPAddress from_addr = null; Boolean gogo = false; ExecuteCommand(“Receiving…”); while (!gogo) { Byte[] receiveBytes = UDP_receive.Receive(ref RemoteIpEndPoint); string returnData = Encoding.UTF8.GetString(receiveBytes); if (returnData.ToString() == “83hcX1”) { gogo = true; […]

服务器在客户端 – 服务器应用程序中不接收消息

在我的客户端 – 服务器应用程序中,客户端向服务器发送消息,服务器应显示消息。 但就我而言,客户端只能发送但服务器无法实现。 我尝试过不同的端口号(即8080,8000,4444等)。 看来套接字可以设置连接,但我真的不知道为什么服务器无法读取客户端的输入。 这是我的完整项目(我已经忽略了这两个应用程序的主要类,因为我只有调用方法): EchoServer.java: package client.server; import java.io.*; import java.net.*; public class EchoServer { public EchoServer() { } public void establish() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8080); } catch (IOException e) { System.out.println(“Could not listen on port: 1234”); System.exit(-1); } Socket clientSocket = null; try { […]

如何重新打开Java套接字

我正在循环中读取Java Socket。 如果读取抛出exception,我想重新打开套接字。 为了测试它,我只需关闭套接字并捕获exception。 当我尝试重新打开套接字时,问题是: serverSocket = new ServerSocket(port) socket = serverSocket.accept() 它引发了一个exception: java.net.BindException: The socket name is already in use 这是测试的直接问题。 但它也可能在生产中发生。 如何通过在抛出exception后打开新的套接字连接来可靠地恢复?

将JVM绑定到默认值以外的IP

我有一个多宿主系统,有多个NIC和IP。 我不确定我的Sun JVM如何选择代表’this’系统的IP(当使用Socket或URLConnection连接到另一个系统时,这是“ 源IP ”)。 它是选择系统默认NIC,还是可以对系统名称进行反向查找? 等等 在任何情况下,有没有办法将JVM显式绑定到特定的IP? 或者,如果有人知道如何从Axis Webservices框架那样做,那将是非常有帮助的。 非常感激..

与(外部)Python服务器的网络连接

我创建了一个Java客户端,它应该连接到python服务器。 作为一个独立的,它工作得非常好,建立连接并发送数据。 public class ClientTest { public static void main(String args[]) { requestGazeData(); } public static void requestGazeData() { ZMQ.Context context = ZMQ.context(1); ZMQ.Socket request = context.socket(ZMQ.REQ); request.connect(“tcp://xxx.xxx:50020”); // Ask for the sub port request.send(“SUB_PORT”); String subPort = request.recvStr(); System.out.println(“subPort: ” + subPort); // open a sub port to listen to pupil ZMQ.Socket subscriber = […]

Java客户端服务器聊天程序

我从互联网上获得了一个代码,用于客户端和服务器在java中进行通信。 我稍微修改了一下,以便服务器和客户端能够相互聊天。 最初我的客户端向服务器发送消息,然后服务器发送到客户端,然后客户端发送到服务器并且它继续…(一个不能连续向另一个发送多个消息)。 为此,在while循环中放置了一个基本代码,以便对话继续进行1到1.但是当我放入while循环时,客户端不会收到来自服务器的消息。 如果没有while循环(我在这里的代码中已注释),则首先将消息由客户端发送到服务器,然后服务器发送到客户端,程序停止。 请帮助我让聊天无休止地进行。 //SERVER import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { private static Socket socket; public static void main(String[] args) { try { int port = 25000; ServerSocket serverSocket = new ServerSocket(port); socket = serverSocket.accept(); System.out.println(“Server Started and listening […]

从套接字读取图像

可能重复: 通过Java Socket读取映像文件 void readImage() throws IOException { socket = new Socket(“upload.wikimedia.org”, 80); DataOutputStream bw = new DataOutputStream(new DataOutputStream(socket.getOutputStream())); bw.writeBytes(“GET /wikipedia/commons/8/80/Knut_IMG_8095.jpg HTTP/1.1\n”); bw.writeBytes(“Host: wlab.cs.bilkent.edu.tr:80\n\n”); DataInputStream in = new DataInputStream(socket.getInputStream()); File file = new File(“imgg.jpg”); file.createNewFile(); DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); int count; byte[] buffer = new byte[8192]; while ((count = in.read(buffer)) > 0) { […]