相关文章
更多最近更新
更多java socket server
2019-03-25 13:38|来源: 网路
用java编写的一个socket服务端,通过一个tcp测试工具测试这个服务端,发现发送数据给服务端,服务端接收不到,当tcp测试工具断开连接后,测试工具发送的字符串才被服务端接收到,这是为什么?
java socket服务端代码
java服务端状态输出如下
server start
client number 1
a client connect /127.0.0.1:50437
affff
tcp测试工具截图
补充说明:
tcp测试工具能够正常连接到服务端,但是文本数据发送,服务端不会实时显示,只有当测试工具断开连接时,这时,服务端才显示刚才测试工具发送的文本数据
java socket服务端代码
package com.myserver.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MultiThreadServer { private int port = 6666; private ServerSocket serverSocket; private ExecutorService executorService;//线程池 private final int POOL_SIZE = 10;//单个CPU线程池大小 public MultiThreadServer() throws IOException { serverSocket = new ServerSocket(port); //Runtime的availableProcessor()方法返回当前系统的CPU数目. executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE); System.out.println("server start"); } public void service() { while (true) { Socket socket = null; try { //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接 socket = serverSocket.accept(); executorService.execute(new Handler(socket)); Count.add(); System.out.println("client number " + Count.num); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { new MultiThreadServer().service(); } } class Handler implements Runnable { private Socket socket; public Handler(Socket socket) { this.socket = socket; } public void run() { try { System.out.println("a client connect " + socket.getInetAddress() + ":" + socket.getPort()); PrintWriter writer = new PrintWriter(socket.getOutputStream()); writer.println("connect success"); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String readLine = reader.readLine(); while (true) { if (readLine != null) { System.out.println(readLine); readLine = reader.readLine(); } else { break; } } writer.close(); reader.close(); } catch (IOException e) { System.out.println("a client leave"); Count.sub(); System.out.println("client number " + Count.num); } finally { try { if (socket != null) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } } class Count { public static int num = 0; public static void add() { num += 1; } public static void sub() { num -= 1; } }
java服务端状态输出如下
server start
client number 1
a client connect /127.0.0.1:50437
affff
tcp测试工具截图
补充说明:
tcp测试工具能够正常连接到服务端,但是文本数据发送,服务端不会实时显示,只有当测试工具断开连接时,这时,服务端才显示刚才测试工具发送的文本数据
相关问答
更多-
java 简单的socket通信[2022-06-25]
最简单的就是将dins.readUTF()方法换成dins.readLine(),出错的原因是到达流的末尾导致的意外终止。 你会发现readLine()方法已经是废弃方法,不建议使用了。 比较常规的方法是使用 BufferedReader br= new BufferedReader(new InputStreamReader(ins)); 来替代DataInputStream 祝你好运! -
Java Socket新手问题[2023-07-27]
1. ServerThread中,已从主线程中得到一个已连接上的Socket socket,但你在ServerThread中又开了一个ServerSocket监听了另一个端口,又把传入来的socket=server.accept();那么在主线程中连接到的那个对话就没有用了,而且那个socket还没有关闭,一直连接着. 2. ServerThread中开的ServerSocket在这里是费的,在ServerThread里你没有循环accept();连接,所以只要有第一个连上了,这个ServerSocket就 ... -
服务器使用in.readLine()读取,而客户端使用print() (无新行)。 所以服务器正在等待出现从未发生的新行。 尝试在客户端使用println()编写。 此外,您需要刷新您的out.flush() :add out.flush() 。 这是使编写器实际发送其有效负载所必需的。 The server reads with in.readLine() while the client prints with print() (no new line). So the server is waitin ...
-
Java Server Socket失败(Java Server Socket failure)[2022-05-28]
不要在循环中创建新的ServerSocket - 您只需要在循环中接受 : ServerSocket myServerSocket = new ServerSocket(9999); while (true) { Socket skt = myServerSocket.accept(); Handling obj = new Handling(); obj.handle(skt); } Don't create a new ServerSocket in the loop - yo ... -
如何将数据写入Flex从Java Server打开的Socket(How to write data to Socket opened by Flex from Java Server)[2022-06-03]
除非我完全误读了文档,否则flash.net.Socket和java.net.Socket都是客户端套接字。 您需要一侧作为服务器套接字才能将它们连接在一起。 对于Java中的服务器端,请查看本演练: Socket Communications 。 Unless I'm misreading the docs completely, both flash.net.Socket and java.net.Socket are client sockets. You need one side to be a ... -
至少: 从Socket.setSoTimeout() javadoc接收异常并不意味着套接字总是死的: 如果超时到期[例如,在读取时,会引发java.net.SocketTimeoutException,尽管Socket仍然有效。 套接字的关闭标志似乎只在Socket.close()方法时设置,所以我不会依赖它。 At least: Receiving an exception does NOT mean the socket is always dead, from Socket.setSoTimeout ...
-
java中的socket权限(socket permission in java)[2022-08-16]
小程序只能连接到从中下载的服务器。 出于安全原因,存在此限制。 因此,如果您的applet的code属性是http://mycompany.com/myapplet ,则必须从applet连接到mycompany.com。 否则您将获得安全性异常。 如果你真的需要连接到其他地方,你必须签署你的applet。 Applets can connect only to server they were downloaded from. This restriction exists for security re ... -
这可能是因为循环永远不会停止: while(true) { //code 你可以使用我为java服务器和客户端制作的类: ChatCleint package com.weebly.foxgenesis.src; import java.net.*; import java.io.*; public final class ChatClient { private Socket socket = null; private DataOutputStrea ...
-
使用Socket的PHP到Java(PHP to Java using Socket)[2023-06-12]
确定发现了问题,你必须在php中显示行结束的位置,以便套接字可以发送它,它将像魅力一样工作:) socket_write ($my_socket, $data."\r\n", strlen ($data."\r\n")); ok found the problem, you have to show where is the end of the line in php so the socket could send it, and it will work like a charm :) sock ... -
在你的代码中 Client clientSocket = new Client(9999,"host"); 你可以改变并运行 Client clientSocket = new Client(9999,"localhost"); 您的代码正在寻找名为“host”的主机。 要么给它主机的IP地址。 如果要使用上面定义的变量host使用 Client clientSocket = new Client(9999,host); 但我没有看到它被初始化的地方 In you code Client client ...