Tag: 套接字

Netty Nio java中的通信

我想在Netty nio中创建一个具有两个客户端和一个服务器的通信系统。 更具体地说,首先,我希望当两个客户端与服务器连接以从服务器发送消息时,之后能够在两个客户端之间传递数据。 我正在使用此示例提供的代码 。 我在代码中的修改可以在这里找到: 链接 似乎serverHandler中的channelRead在第一个客户端被连接时工作,因此它总是返回1,但是当连接第二个客户端时不会更改为2.当两个客户端连接到服务器时,如何从服务器正确检查? 如何从客户端的主要function中动态读取此值? 那么这是让两个客户沟通的最佳方式? EDIT1:显然似乎客户端服务正在运行并直接关闭,因此每次运行新的NettyClient时都会连接,但之后关闭连接。 所以计数器总是从0到1。 正如我在下面的评论中所建议的那样,我在同一个端口使用telnet测试它,然后计数器似乎正常增加,但NettyClient服务没有。 EDIT2:似乎我得到的问题来自future.addListener(ChannelFutureListener.CLOSE); 它位于ProcessingHandler class channelRead中。 当我评论它时,似乎代码工作。 但是,我不确定评论的后果是什么。 此外,我希望从我的客户端的主要function检查返回消息何时是特定的两个。 如何,我可以创建一个等待来自服务器的特定消息的方法,同时它阻止主要function。 static EventLoopGroup workerGroup = new NioEventLoopGroup(); static Promise promise = workerGroup.next().newPromise(); public static void callClient() throws Exception { String host = “localhost”; int port = 8080; try { Bootstrap b = new Bootstrap(); b.group(workerGroup); […]

如何在Java UDP中获取实际的包大小`byte `数组

这是我上一个问题的后续问题: Java UDP发送 – 逐个接收数据包 正如我在那里指出的那样,基本上,我希望通过UDP逐个接收数据包。 这是一个示例代码: ds = new DatagramSocket(localPort); byte[] buffer1 = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer1, buffer1.length); ds.receive(packet); Log.d(“UDP-receiver”, packet.getLength() + ” bytes of the actual packet received”); 这里,实际的数据包大小是300字节,但buffer1被分配为1024字节,对我来说,处理buffer1是错误的。 如何从这里获取实际的数据包大小byte[]数组? 而且,更根本的是,为什么我们需要预先分配缓冲区大小以接收Java中的UDP数据包? (node.js不这样做) 有没有办法不预先分配缓冲区大小并直接接收UDP数据包? 谢谢你的想法。

打开的sockets和连接的sockets有什么区别?

Java Socket类有两个方法isClosed和isConnected来检查套接字是分别关闭还是连接。 我想知道一个只打开的TCP套接字和一个打开并连接的TCP套接字有什么区别,这与UDP有什么不同。

如何使用Java向所有线程客户端发送数据?

我是Java的新手,我正在尝试构建一个非常基本的Java Relay服务器,它将消息从客户端发送到所有连接的客户端。 我已经想出如何进行线程允许多个连接,但我无法弄清楚如何将传入的消息回显给所有连接的套接字线程。 这是我的Main.java源代码: http://pastebin.com/vVewfv3s 这是我的SocketThread.java源代码: http://pastebin.com/yHA2BcUi 基本上,我想知道当前编码设置的最简单方法是能够将传入消息从一个客户端发送到所有其他客户端。 我目前正在使用Windows telnet客户端作为使用此服务器的客户端。

客户端未从服务器接收字符串

我试图在java中使用套接字编写TCP客户端,但我似乎无法读取从服务器发送到客户端的数据。 有一段时间我会从服务器收到但不是所有时间.. public class TCPClient { private String serverMessage; public static final String SERVERIP = “103.13.97.87”; //your computer IP address public static final int SERVERPORT = 8101; private OnMessageReceived mMessageListener = null; private boolean mRun = false; PrintWriter out; BufferedReader in; /** * Constructor of the class. OnMessagedReceived listens for the messages received from server […]

Java网络服务扫描程序

我正在尝试编写一个类,它将扫描本地网络以查找将要运行的服务。 问题是如果地址没有激活(没有回复),它会挂起5秒以上,这是不好的。 我想在几秒钟内完成扫描。 有人可以提供一些建议吗? 我的代码部分如下 int port = 1338; PrintWriter out = null; BufferedReader in = null; for (int i = 1; i < 254; i++){ try { System.out.println(iIPv4+i); Socket kkSocket = null; kkSocket = new Socket(iIPv4+i, port); kkSocket.setKeepAlive(false); kkSocket.setSoTimeout(5); kkSocket.setTcpNoDelay(false); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); out.println("Scanning!"); String fromServer; while […]

Android Socket(客户端 – 服务器)

您好亲爱的程序员,我需要您的帮助。 我做了一个非常非常简单的Java套接字(客户端 – 服务器)项目,效果很好。 但是当我使用那个客户端代码来制作它的android时,它不起作用,但我只为android制作客户端代码,服务器代码再次使用Java(也许我应该在android中制作服务器代码?) 服务器(Java) public class DailyAdviceServer{ public void go() { try { ServerSocket serverSock = new ServerSocket(16242, 50); while (true) { Socket sock = serverSock.accept(); PrintWriter writer = new PrintWriter(sock.getOutputStream()); String advice = getAdvice(); writer.println(advice); writer.close(); System.out.println(“smth”); } } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { […]

从套接字读取时如何检测客户端何时完成发送请求?

我现在正在写一个http服务器,我从sockets读取时遇到问题。 我的问题是来自客户端的inputStream永远不会结束,它会一直读取,直到客户端关闭。 我知道客户端在发送http请求后不会立即关闭与服务器的连接。 当客户端发送了所有请求数据(即标题+正文)时,如何退出while loop 。 while (in.hasNextLine()) { String line = in.nextLine(); if (line.equals(“”)){ // last line of request header is blank break; // quit while loop when last line of header is reached } else { request = request + line + “\n”; } } 在阅读了你们的评论和回答之后,这就是我想出来的, is = incoming.getInputStream(); os = incoming.getOutputStream(); in […]

如何使用socket.setSoTimeout()?

使用socket.seSoTimeout(5000);在套接字上设置超时时socket.seSoTimeout(5000); 套接字是否关闭或者在超时后停止监听? 我是否必须再次打开套接字才能继续收听或自动打开? receivingSocket.setSoTimeout(5000); // set timer try{ receivingSocket.receive(packet); } catch(SocketTimeoutException e){ System.out.println(“### Timed out after 5 seconds.”); } //will I have to reopen the socket here?

c ++和java之间的通信

我必须编写一个JAVA程序,它与C ++中的其他程序进行通信。 要发送的消息是简单的String / Char [],如“REQ”,“PAUSE”,“02,14”,末尾带有’\ 0’,所以:“REQ \ 0”。 我有这个: socket = new Socket(); socket.connect(new InetSocketAddress(komputer, port), czekaj); in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); 发送: public void sendTekst(String tekst){ try{ char []a = tekst.toCharArray(); for(int i = 0; i < a.length; i++) out.writeChar(a[i]); out.writeChar((byte)'\0'); out.flush(); } catch(IOException e) { JOptionPane.showMessageDialog(ramka, "Blad wysylu: " […]