Java使用Socket传输数据
import sun.swing.UIAction; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; //TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or // click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. public class Main { public static void main(String[] args) { JFrame jf = new JFrame("socket通信"); jf.setSize(800, 400); JPanel jp = new JPanel(); JButton jbServerCreate = new JButton("创建服务"); jp.add(jbServerCreate); jbServerCreate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { createServer(); } }); JButton jbServerClose = new JButton("关闭服务"); jp.add(jbServerClose); jbServerClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { closeServer(); } }); JButton jbClientCreate = new JButton("创建客户端"); jp.add(jbClientCreate); jbClientCreate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { createClient(); } }); JButton jbClientClose = new JButton("关闭客户端"); jp.add(jbClientClose); jbClientClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { closeClient(); } }); JButton jbSendFromClient = new JButton("发送数据到服务"); jp.add(jbSendFromClient); jbServerClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { sendFromClient(); } }); jf.add(jp); // 设置窗口关闭时退出程序 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 显示窗口 jf.setVisible(true); } private static ServerSocket serverSocket = null; private static boolean isServerRunning = true; private static void createServer() { isServerRunning = true; try { serverSocket = new ServerSocket(6666); // serverSocket.bind(new InetSocketAddress("127.0.0.1", 6666)); System.out.println("创建了8088端口的服务器"); new Thread(new Runnable() { @Override public void run() { Socket cs = null; try { cs = serverSocket.accept(); System.out.println("有新的连接请求,客户端地址" + cs.getInetAddress()); BufferedReader br = new BufferedReader(new InputStreamReader(cs.getInputStream())); PrintWriter pw = new PrintWriter(cs.getOutputStream(), true); while (isServerRunning) { String line = br.readLine(); System.out.println("服务端收到客户端发送的数据:"+line); pw.println(line+"_server"); pw.flush(); } br.close(); pw.close(); cs.close(); serverSocket.close(); } catch (IOException e) { throw new RuntimeException(e); } } }).start(); } catch (IOException e) { e.printStackTrace(); } } private static void closeServer() { isServerRunning = false; } private static Socket clientSocket = null; private static void createClient() { try { clientSocket = new Socket("127.0.0.1", 6666); clientSocket.setSoTimeout(3000); // clientSocket.connect(new InetSocketAddress("127.0.0.1", 6666)); new Thread(new Runnable() { @Override public void run() { BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in)); while (isServerRunning) { String message = userIn.readLine(); System.out.println("客户端收到服务端发送的数据:"+in.readLine()); out.println(message); } //一定要调用close服务端才会收到数据 in.close(); out.close(); userIn.close(); clientSocket.close(); } catch (IOException e) { throw new RuntimeException(e); } } }).start(); } catch (IOException e) { throw new RuntimeException(e); } } private static void closeClient() { isServerRunning = false; } private static StringBuffer sb = new StringBuffer(); private static void sendFromClient() { /*if (clientSocket != null && !clientSocket.isClosed()){ try { clientSocket.getOutputStream().write(sb.append("hello world").toString().getBytes()); clientSocket.getOutputStream().flush(); } catch (IOException e) { throw new RuntimeException(e); } }*/ } }
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下