Java--Socket通信(双向,有界面)

article/2025/10/15 1:53:22

 

服务端:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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 javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;public class ChatFrameServer{private PrintWriter pw;private JFrame frame;private JPanel pane_buttom;private JSplitPane pane_center;//显示内容的文本框,输入内容的文本框,发送内容按钮private JScrollPane pane_showWindow;private JScrollPane pane_inputWindow;private JTextArea area_showWindow;private JTextArea area_inputWindow;private JButton btn_send;private Dimension dimension;//用于设置area_showWindow可拖拉的大小//初始化public ChatFrameServer() {frame = new JFrame();pane_buttom = new JPanel();pane_showWindow = new JScrollPane();pane_inputWindow = new JScrollPane();area_showWindow = new JTextArea();area_inputWindow = new JTextArea();pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);btn_send = new JButton("发送");dimension = new Dimension(50, 300);}//调用方法显示窗口public void showFrame(){initFrame();initChatTextArea();initButton();btn_send();socket();}//主窗体public void initFrame(){frame.setTitle("服务端");int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();frame.setBounds(width / 2, height / 2, 400, 450);frame.setVisible(true);}//内容显示文本框和输入内容文本框private void initChatTextArea(){//取得视图焦点pane_showWindow.getViewport().add(area_showWindow);pane_inputWindow.getViewport().add(area_inputWindow);//将显示文本域设置为不可编辑area_showWindow.setEditable(false);//设置显示文本域可拖拉的大小 pane_showWindow.setMinimumSize(dimension);frame.add(pane_center, BorderLayout.CENTER);}//发送文件,发送内容按钮public void initButton(){pane_buttom.add(btn_send);frame.add(pane_buttom, BorderLayout.SOUTH);}private void btn_send(){btn_send.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String info = area_inputWindow.getText();area_showWindow.append("服务端:"+info+"\r\n");pw.println(info);area_inputWindow.setText("");}});}private void socket(){ServerSocket ss;try {ss = new ServerSocket(9988);//等待连接 客户端Socket s=ss.accept();InputStreamReader isr=new InputStreamReader(s.getInputStream());BufferedReader br=new BufferedReader(isr);//PrintWriter必须和socket有密切的关系pw=new PrintWriter(s.getOutputStream(),true);//读取从客户端法发来的信息while(true) {//读取从客户端发来的信息String info=br.readLine();//在文本栏里显示area_showWindow.append("客户端:"+info+"\r\n");}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {ChatFrameServer chat = new ChatFrameServer();chat.showFrame();}
}


客户端:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;public class ChatFrame{private PrintWriter pw;private JFrame frame;private JPanel pane_buttom;private JSplitPane pane_center;//显示内容的文本框,输入内容的文本框,发送内容按钮private JScrollPane pane_showWindow;private JScrollPane pane_inputWindow;private JTextArea area_showWindow;private JTextArea area_inputWindow;private JButton btn_send;private Dimension dimension;//用于设置area_showWindow可拖拉的大小//初始化public ChatFrame() {frame = new JFrame();pane_buttom = new JPanel();pane_showWindow = new JScrollPane();pane_inputWindow = new JScrollPane();area_showWindow = new JTextArea();area_inputWindow = new JTextArea();pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);btn_send = new JButton("发送");dimension = new Dimension(50, 300);}//调用方法显示窗口public void showFrame(){initFrame();initChatTextArea();initButton();btn_send();socket();}//主窗体public void initFrame(){frame.setTitle("客户端");int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();frame.setBounds(width / 2, height / 2, 400, 450);frame.setVisible(true);}//内容显示文本框和输入内容文本框private void initChatTextArea(){//取得视图焦点pane_showWindow.getViewport().add(area_showWindow);pane_inputWindow.getViewport().add(area_inputWindow);//将显示文本域设置为不可编辑area_showWindow.setEditable(false);//设置显示文本域可拖拉的大小 pane_showWindow.setMinimumSize(dimension);frame.add(pane_center, BorderLayout.CENTER);}//发送文件,发送内容按钮public void initButton(){pane_buttom.add(btn_send);frame.add(pane_buttom, BorderLayout.SOUTH);}private void btn_send(){btn_send.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String info = area_inputWindow.getText();area_showWindow.append("客户端: "+info+"\r\n");pw.println(info);area_inputWindow.setText("");}});}private void socket(){try {Socket s = new Socket("127.0.0.1",9988);InputStreamReader isr=new InputStreamReader(s.getInputStream());BufferedReader br=new BufferedReader(isr);pw=new PrintWriter(s.getOutputStream(),true);while(true){//不停地读取从服务器端发来的信息String info=br.readLine();area_showWindow.append("服务端: "+info+"\r\n");}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {ChatFrame chat = new ChatFrame();chat.showFrame();}
}


 


http://chatgpt.dhexx.cn/article/a5Tww6r0.shtml

相关文章

JAVA 网络编程 Socket

网络:相互连接的计算机,带来的好处有共享资源,交换数据 IP地址:定位计算机地址 通常由网络地址主机地址组合 查看本机IP地址:电脑左下角输入CMD,回车在CMD界面输入ipconfig 127.0.0.1 测试本机网络配置 …

初识Java Socket编程

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。…

Java socket详解,看这一篇就够了

刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白。特抽时间整理一下,详细讲述Java socket通信原理和实现案例。整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理,后慢慢接近生产…

递归下降文法C语言实验报告,递归下降分析法的简单例子的c语言实现

我们举的简单例子是 G[s]: S → a | ∧ | (T) T→T, S | S 转化为LL1文法 S →a |∧| (T) T →ST T→,ST| ε c语言代码实现 #include char scaner(char*input,int* p); void S(char*input,int* p); void T(char*input,int* p); void T1(char*input,int* p); void error(); int…

C++:编译实验之递归下降分析器

一、实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解。 2.根据文法的产生式规则消除左递归,提取公共左因子构造出相应的递归下降分析器。 二、实验内容 根据课堂讲授的形式化算法,编制程序实现递归下降分析器,能对常见…

递归下降分析程序的设计和实现

递归下降分析程序的设计和实现 一、实验的目的和要求 1、了解语法分析的主要任务。 2、实现基本的递归下降分析器,能够分析任意的符号串是否为该文法所定义的合法算术表达式。二、实验环境 Windows7 Dev-C三、实验准备 先将递归下降分析程序的生成认真的学习一…

利用递归下降分析方法完成语法分析

一、 程序设计题目与说明 利用递归下降分析方法完成语法分析。 递归下降分析法是一种自顶向下的分析方法,文法的每个非终结符对应一个递归过程(函数)。分析过程就是从文法开始符出发执行一组递归过程(函数)&#xff…

编译原理 --- 递归下降分析器

第一部分 --- 构造递归下降分析器 1.在上面这个例子中则是子程序序A先调用子程序B,本程序结束完调用之后再返回来继续调用下一个符号 如果下一个符号是终结符的话那就直接进行匹配,不进行调用,匹配完后继续调用下一个符号 如果不是的话则调…

递归下降分析法实现强化计算器

一. 实验概述 1.使用bison 和 flex 实现扩展版计算器 该计算器支持实型的两种表达,分别是小数和科学计数法. 该计算器支持 加, 减, 乘 除 四种运算 和括号()运算符. 该计算器支持整形,实型混合运算 2.通过递归下降分析法自行编写的语法分析和使用flex进行的词法分析的计算器.…

编译原理研究性学习专题 2——递归下降语法分析设计原理与实现

1 实验内容 完成以下描述赋值语句的 LL(1)文法的递归下降分析程序 G[S]: S→ VE E→ TE’ E’→ ATE’ | e T→ FT’ T’→ MFT’ | E F→ (E) | i A→ | - M→ * | / V→ i 设计说明:终结符号 i 为用户定义的简单变量,即标识符的定义。 2 实验要求 …

Python技法之简单递归下降Parser的实现方法

文章目录 一. 算术运算表达式求值二. 生成表达式树三、左递归和运算符优先级陷阱四. 相关包 一. 算术运算表达式求值 对于简单的算术运算表达式,假定我们已经用分词技术将其转化为输入的tokens流,如NUMNUM*NUM。 在此基础上,我们定义BNF规则…

编译实验 . 递归下降分析器

实验目的: 1.1掌握语法分析方法。 1.2掌握使用算符优先分析法。 1.3完成语法分析程序的设计和实现。 1.4程序能完成对指定语言的语法分析。 2. 递归下降分析器 在不含左递归和每个非终结符的所有候选终结首符集都两两不相交的条件下,我们就可能构造…

用c语言编译递归下降翻译器,Java实现C语言语义分析(递归下降)

说起这次的语义分析,不得不说的是我的重大的改变。上一次的语法分析是利用了预测分析法来实现的,经过多方考证,发现用预测分析法的语法分析器基础来实现语义分析的困难重重,例如在语法指导翻译的时候那个栈的变化和各种属性的传递…

递归下降分析法

介绍: 递归下降分析法是针对LL(1)文法的一种语法分析方法; 通过对文法的消除左递归,提取左公因子,对各个产生式和非终结符求first()和follow()集,通过first()和follow()集构造该文法的预测分析表,当这个预…

编译原理实验-递归下降语法分析

具体代码已放至Github(仅供参考): qxpBlog/Compiler_UESTC: 电子科技大学编译原理实验 (github.com) 具体实验过程如下: 一、实验目的、原理、内容及步骤: (1)目的:通过本实验加深…

编译原理实验--实验二 递归下降法判断算术表达式的正确性--Python实现

目录 一、实验目的和要求 二、实验内容 三、实验环境 四、实验步骤 1、语法分析所依据的文法; 2、给出消除左递归及提取左公因子的文法; 五、测试要求 六、实验步骤 1、语法分析所依据的文法 2、给出消除左递归及提取左公因子的文法&#xff1…

递归下降语法分析

一、实验目的 递归下降语法分析 二、实验题目 三、分析与设计 四、源代码 #include <iostream> #include <fstream> #include <cstring> #include <string> #include <conio.h> #define digit 1 // 1数字 #define op 2 // -*/()# #define Hh …

Java递归下降分析器_递归下降语法分析器

用java语言编写的递归下降语法分析器&#xff0c;是一种适合手写语法编译器的方法&#xff0c;且非常简单。递归下降法对语言所用的文法有一些限制&#xff0c;但递归下降是现阶段主流的语法分析方法&#xff0c;因为它可以由开发人员高度控制&#xff0c;在提供错误信息方面也…

递归下降算法

递归下降算法 算法模型&#xff1a; Term Term Expr ExprExprFactor Factor 单个元素。最小单位。 实现原理&#xff1a; 一个程式进入算法及被看作是一个项&#xff0c;分解成项加表达式的形式&#xff0c;表达式被分解成 表达式加因子的形式&#xff0c;因子是这个算法…

实验二:递归下降语法分析

文章目录 一、实验目的二、实验原理与要求 1、原理 2、要求 三、实验设备四、实验内容五、实验步骤 1. 单词内码表 2. 定义语言文法 3. 语法分析器的实现&#xff08;编码&#xff09; 4. 测试 六、配套资源 一、实验目的 理解自顶向下语法分析的基本模式&#xff0c;熟悉…