class ServerThread implements Runnable { Socket socket; char[] cbuf; public ServerThread(Socket socket) { super(); this.socket = socket; } @Override public void run() { try { BufferedReader netIn2 = new BufferedReader(new InputStreamReader( socket.getInputStream())); System.out.println(netIn2.readLine()); // 从网络套接字获取输出流,建立打印输出流 PrintWriter netOut2 = new PrintWriter(socket.getOutputStream()); netOut2.write("你好\n"); netOut2.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class ServerTest { public static void main(String[] args) throws Exception { int PORT = 8888; // 侦听端口 // 创建ServerSocket ServerSocket serverSocket = new ServerSocket(PORT); // 开始循环 while (true) { // 等待连接 Socket socket = (1) ; // 处理链接的线程类 ServerThread st = new ServerThread(socket); // 启动线程处理 new Thread(st).start(); } } }
时间: 2024-02-10 21:19:51 浏览: 61
这段Java代码是一个简单的Socket服务器程序,其中ServerTest类是服务器程序的主类,ServerThread类是处理连接请求的线程类。
在主类ServerTest的main方法中,通过创建ServerSocket对象并指定端口号来创建一个TCP服务器,在while循环中不断等待客户端的连接,当有客户端连接进来后,创建一个Socket对象来处理连接请求。然后将新创建的Socket对象作为参数传入ServerThread的构造函数中,创建一个ServerThread线程对象,最后通过启动线程来处理客户端的请求。
在ServerThread的run方法中,通过socket.getInputStream()方法获取到输入流,然后通过BufferedReader的readLine()方法来读取客户端发送过来的信息。接着通过socket.getOutputStream()方法获取到输出流,然后通过PrintWriter的write()方法向客户端发送信息。最后通过调用flush()方法将输出流缓冲区中的内容发送到客户端。如果出现异常,就通过printStackTrace()方法打印出异常信息。
相关问题
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; class ServerThread implements Runnable { Socket socket; char[] cbuf; public ServerThread(Socket socket) { super(); this.socket = socket; } @Override public void run() { try { BufferedReader netIn2 = new BufferedReader(new InputStreamReader( socket.getInputStream())); System.out.println(netIn2.readLine()); // 从网络套接字获取输出流,建立打印输出流 PrintWriter netOut2 = new PrintWriter(socket.getOutputStream()); netOut2.write("你好\n"); netOut2.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class ServerTest { public static void main(String[] args) throws Exception { int PORT = 8888; // 侦听端口 // 创建ServerSocket ServerSocket serverSocket = new ServerSocket(PORT); // 开始循环 while (true) { // 等待连接 Socket socket = new socket(); // 处理链接的线程类 ServerThread st = new ServerThread(socket); // 启动线程处理 new Thread(st).start(); } } }
这是一个简单的Java Socket编程示例,它创建了一个ServerSocket对象并在指定端口上侦听连接。当客户端连接到该端口时,程序将创建一个新线程(ServerThread),并将新套接字传递给该线程,以便线程可以与客户端进行通信。在ServerThread中,程序从客户端获取输入流,并打印在控制台上。然后,程序从网络套接字获取输出流,并向客户端发送一条消息。最后,程序关闭套接字和相关的IO对象。
public void createServer(int port, ServerMsgPanel serverMsgPanel) throws IOException { long clientAccessNumber = 1L; this.serverMsgPanel = serverMsgPanel; try { this.serverSocket = new ServerSocket(port); serverMsgPanel.msgTextArea.setText("服务器启动于:" + InetAddress.getLocalHost() + ":" + this.serverSocket.getLocalPort() + "\n"); while(true) { Socket clientSocket = this.serverSocket.accept(); serverMsgPanel.msgTextArea.append("已连接用户:" + clientSocket + "\n"); DataOutputStream outputData = new DataOutputStream(clientSocket.getOutputStream()); this.clientDataHash.put(clientSocket, outputData); this.clientNameHash.put(clientSocket, "新玩家" + clientAccessNumber++); ServerThread serverThread = new ServerThread(clientSocket, this.clientDataHash, this.clientNameHash, this.chessPeerHash, serverMsgPanel); serverThread.start(); } } catch (IOException var8) { var8.printStackTrace(); } }
这段代码是用Java语言编写的创建服务器的方法。它打开一个ServerSocket,监听指定的端口,等待客户端连接。当有客户端连接时,会创建一个Socket对象,将客户端的输出流包装成DataOutputStream对象,并将客户端的Socket、DataOutputStream和客户端名称等信息存储在哈希表中。然后,启动一个ServerThread线程来处理与该客户端的通信。这个方法还接受一个ServerMsgPanel参数,用于在GUI界面上显示服务器的日志信息。
阅读全文