Java Socket网络编程,你要的实验,我都有

article/2025/10/15 1:59:42

JAVA Socket编程

目录

  • JAVA Socket编程
    • 多人聊天室
      • 客户端源代码
      • 服务器端源代码
      • 运行展示
    • 邮件发送客户端
      • 运行展示
    • 在线云笔记
      • 客户端窗口
      • 服务器端代码
      • 运行展示

多人聊天室

客户端源代码


import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;/*客户端窗口构建*/
public class ClientChatView extends JFrame{//显示文本的窗口private JTextArea ta = new JTextArea(10,20);//输入文本的窗口private JTextField tf = new JTextField(20);//创建客户端socketprivate Socket cs = null;//指定客户端socket端口private static final int PORT = 8888;//指定客户端socket的ip地址private static final String CONNSTR = "127.0.0.1";//网络输出流private DataOutputStream dos = null;private boolean isconn = false;//ClientChatView构造方法public ClientChatView() throws HeadlessException {super();}//ClientChatView初始化方法public void init() {//设置窗口标题this.setTitle("ClientView");//设置窗口样式this.add(ta,BorderLayout.CENTER);this.add(tf,BorderLayout.SOUTH);//设置窗口总大小this.setBounds(300, 300, 300, 400);//关闭上边窗口输入功能ta.setEditable(false);//光标聚焦tf.requestFocus();//点击窗口叉号=关闭客户端this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//监听tf输入到ta,并清除掉tf中内容tf.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//获取tf中输入的信息String strSend = tf.getText();//使用send方法发送信息给服务器端send(strSend);if (strSend.trim().length()==0) {return;//tf中没有输入}tf.setText("");//加入到ta中//ta.append(strSend+"\n");}});//正式创建客户端Socket/*try catch处理异常*/try {cs = new Socket(CONNSTR,PORT);isconn = true;} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}this.setVisible(true);new Thread(new Receive()).start();}//发送信息到服务器上的方法public void send(String str) {try {//使用socket的getinputstream方法获取网络字节输入流对象dos = new DataOutputStream(cs.getOutputStream());//将输出流信息发送给服务器dos.writeUTF(str);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//多线程的类,实现多线程接收class Receive implements Runnable{public void run() {try {while(isconn) {DataInputStream dis = new DataInputStream(cs.getInputStream());String str = dis.readUTF();ta.append(str);}}catch (SocketException e3) {System.out.println("Sever stopped");ta.append("Server stopped");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {ClientChatView cc = new ClientChatView();cc.init();}
}

服务器端源代码


import java.awt.BorderLayout;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Iterator;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;//服务器窗口创建
/*一个框框,两个按钮*/
public class ServerChat extends JFrame{//设置服务器窗口——一个框框JTextArea serverTa = new JTextArea();//创建服务器窗口——两个按钮private JPanel btnTool = new JPanel();private JButton starBtn = new JButton("start");private JButton stopBtn = new JButton("stop");//设置服务器端socket的端口号private static final int PORT = 8888;//创建服务器端socketprivate ServerSocket ss = null;private Socket s = null;//设置服务器启动的标志private boolean isStart = false;//设置连接到服务器上的客户socket数组private ArrayList<ClientConn> cclist=new ArrayList<ClientConn>();//初始化服务器窗口public void init() {//设置窗口标题this.setTitle("ServerView");//设置窗口样式this.add(serverTa,BorderLayout.CENTER);btnTool.add(starBtn);btnTool.add(stopBtn);this.add(btnTool,BorderLayout.SOUTH);//设置窗口总大小this.setBounds(0, 0, 500, 500);//设置serverTa不可输入serverTa.setEditable(false);//点击叉号关闭窗口,同时停止服务器运行,后面改进//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//判断服务器是否启动if(isStart) {serverTa.append("Server started.\\n");}else {serverTa.append("Server not start."+"\n");}//监听开始按钮,启动服务器starBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {if(ss==null) {ss=new ServerSocket(PORT);}isStart = true;serverTa.append("Server started."+"\n");}catch(IOException e1) {e1.printStackTrace();}}});//监听停止按钮,关闭服务器stopBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//关机isStart = false;try {if(s!=null) {s.close();}if(ss!=null) {ss.close();}serverTa.append("Server stopped");System.exit(0);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});//监听窗口(叉号)this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {//关机isStart = false;try {if(s!=null) {s.close();}if(ss!=null) {ss.close();}serverTa.append("Server stopped");System.exit(0);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});this.setVisible(true);startServer();}/*服务器启动方法*/public void startServer() {//正式创建服务器sockettry {try {ss = new ServerSocket(PORT);isStart = true;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//只要服务器运行就一直等待客户连接,接受多个客户端连接while (isStart) {//获取客户端socket对象s = ss.accept();//将该对象添加进数组cclist.add(new ClientConn(s));//在控制台显示相关信息System.out.println("A Client connected" + s.getInetAddress() + "/" + s.getPort()+"\n");//在服务器窗口显示相关信息serverTa.append("A Client connected" + s.getInetAddress() + "/" + s.getPort()+"\n");}}catch (SocketException e3) {System.out.println("Sever stopped");serverTa.append("Server stopped");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*服务器停止方法*/public void stopServer() {}/* 服务器接收数据方法,应该是多线程的接收*/
//	public void reciveStr() {
//		try {
//			dis = new DataInputStream(s.getInputStream());
//			String str = dis.readUTF();
//			System.out.println(str);
//			serverTa.append(str);
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//	}/*该对象是所有连接到服务器端的连接对象*/class ClientConn implements Runnable{Socket s= null;public ClientConn(Socket s) {this.s= s;//得到一个s就创建一个线程,并运行下面的try/catch(new Thread(this)).start();}//同时接受客户端信息-多线程的接收public void run() {try {//使用getinputstream获取网络输入流(客户端输入流)DataInputStream dis = new DataInputStream(s.getInputStream());while (isStart) {//读取输入流中信息String str = dis.readUTF();//在控制台和服务器窗口打印System.out.println(s.getInetAddress()+"|"+s.getPort()+"说:"+str + "\n");serverTa.append(s.getInetAddress()+"|"+s.getPort()+"说:"+str + "\n");String strsend = s.getInetAddress()+"|"+s.getPort()+"说:"+str + "\n";//遍历后再发送Iterator<ClientConn> it=cclist.iterator();while(it.hasNext()) {ClientConn o=it.next();o.resend(strsend);}}}catch(SocketException e) {System.out.println("A Client leave");serverTa.append("a Client leave:"+s.getInetAddress()+"|"+s.getPort()+"\n");}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//服务器分发数据,通过遍历,发生给每个客户端,在客户端同样要多线程的接收public void resend(String str) {try {DataOutputStream dos = new DataOutputStream(this.s.getOutputStream());dos.writeUTF(str);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {ServerChat sc = new ServerChat();sc.init();}}

运行展示

在这里插入图片描述

邮件发送客户端

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;import com.sun.jdi.connect.Transport;public class EmailClient extends JFrame{//设置窗口//设置邮件主题窗口private JTextField Title = new JTextField("Title:",20);//邮件发送目的的窗口private JTextField TO = new JTextField("TO:",20);//文本窗口private JTextArea ta = new JTextArea(10,20);private JButton sendBtn = new JButton("send");public void init() {//设置窗口标题this.setTitle("ClientView");//设置窗口样式athis.add(ta,BorderLayout.CENTER);this.add(Title,BorderLayout.NORTH);this.add(TO,BorderLayout.SOUTH);this.add(sendBtn, BorderLayout.EAST);//设置窗口总大小this.setBounds(300, 300, 300, 400);//光标聚焦TO.requestFocus();//点击窗口叉号=关闭客户端this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置监听,判断是否开始发送sendBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {mail();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});this.setVisible(true);}public void mail () throws Exception {// 用于连接邮件服务器的参数配置Properties props = new Properties(); props.setProperty("mail.host", "smtp.qq.com");                                                                                          props.setProperty("mail.transport.protocol", "smtp");                                                                                     props.setProperty("mail.smtp.auth", "true");// 根据参数配置,创建会话对象Session session= Session.getInstance(props); session.setDebug(true);// 创建邮件内容对象MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("3271656206@qq.com", "Kechen", "UTF-8"));// 收件人message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(TO.getText().substring(3), "you", "UTF-8"));// To: 增加收件人(可选)//message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));// Cc: 抄送(可选)//message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));// Bcc: 密送(可选)//message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));//邮件主题message.setSubject(Title.getText().substring(6), "UTF-8");//邮件正文message.setContent(ta.getText(), "text/html;charset=UTF-8");//定义传输协议javax.mail.Transport transport = session.getTransport("smtp");transport.connect("smtp.qq.com","3271656206@qq.com","dnrfvjtohotkchai");transport.sendMessage(message, message.getAllRecipients());transport.close();}public static void main(String[] args) {EmailClient ec = new EmailClient();ec.init();}
}

运行展示

在这里插入图片描述
在这里插入图片描述

在线云笔记

在线云笔记开发并未完成,需要把用户名和密码储存在文件中,将代码中的查询数组操作替换成文件读取操作即可。

客户端窗口

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;public class Client extends JFrame{//创建客户端笔记显示窗口private JTextArea Show = new JTextArea(46,35);private JTextArea List = new JTextArea(46,18);private JTextArea Note = new JTextArea(46,18);//创建登录按钮private JButton login = new JButton("Login");private JButton sign = new JButton("Sign");//创建功能按钮private JButton create = new JButton("CreateNote");private JButton save = new JButton("SaveNote");private JButton upload = new JButton("UpLoad");private JButton open = new JButton("OpenNote");private JButton del = new JButton("DeleteNote");private JButton find = new JButton("FindNote");private JButton download = new JButton("DownloadNote");private JPanel btnTool = new JPanel(new GridLayout(7,1));private JPanel logbtnTool = new JPanel();private JPanel textTool = new JPanel();private JPanel kong1 = new JPanel();private JPanel kong2 = new JPanel();//设置功能按钮是否被按下private int issave = 0;private int isopen = 0;private int isdel = 0;private int isfind = 0;private int isupload = 0;private int isdownload = 0;//设置时间private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置传输文本private String str = "";//设置用户名密码private String username = "";private String pwd = "";private int islogin = 0;private int issign = 0;private String note = "";private boolean isright = false;//设置socketprivate Socket cs = null;private DataOutputStream dos = null;private DataInputStream dis = null;//登录界面public void init() {//设置窗口标题,位置和大小this.setTitle("ClientView");this.setBounds(300, 300, 900, 750);List.setText("文件列表\n");Note.setText("事件通知\n");//设置文本显示窗口位置textTool.add(List);kong1.setBounds(0, 0, 30,600);textTool.add(kong1);textTool.add(Note);kong1.setBounds(0, 9, 30,600);textTool.add(kong2);textTool.add(Show);this.add(textTool,BorderLayout.EAST);//设置按钮大小create.setBounds(0, 0, 50, 100);save.setBounds(0, 100, 50, 100);open.setBounds(0, 200, 50, 100);del.setBounds(0, 300, 50, 100);find.setBounds(0, 400, 50, 100);download.setBounds(0, 500, 50, 100);//布局按钮btnTool.add(create);btnTool.add(save);btnTool.add(open);btnTool.add(del);btnTool.add(find);btnTool.add(upload);btnTool.add(download);this.add(btnTool,BorderLayout.WEST);//关闭输入直到点击创建Show.setEditable(false);List.setEditable(false);//关闭按键只到登陆成功create.setEnabled(false );save.setEnabled(false );open.setEnabled(false );del.setEnabled(false );find.setEnabled(false );upload.setEnabled(false );download.setEnabled(false );this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//建立连接try {cs = new Socket("127.0.0.1",8888);dos = new DataOutputStream(cs.getOutputStream());dis = new DataInputStream(cs.getInputStream());} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//登录Login();//设置按钮监听create.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//开启输入Show.setEditable(true);}});save.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//请求服务器保存笔记try {Save();tanchuang();} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});open.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//打开笔记try {Open();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});del.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//删除笔记try {Del();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});find.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//查找笔记,为每个用户创建一个记录文件名的文件Find();}});upload.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//上传笔记,简单的上传可以实现,想实现资源管理器直接选择文件Upload();}});download.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//下载笔记,简单的下载可以实现,想实现调用资源管理器直接下载Download();}});
//		try {
//			cs = new Socket("127.0.0.1",8888);
//			dos = new DataOutputStream(cs.getOutputStream());
//			dis = new DataInputStream(cs.getInputStream());
//		} catch (UnknownHostException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		} catch (IOException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		}}//登录方法public void Login() {JFrame JF = new JFrame();JTextArea User = new JTextArea(1,35);JTextArea PWD = new JTextArea(1,35);JTextArea NOTE = new JTextArea(1,35);NOTE.setEditable(false);JPanel JP = new JPanel(new GridLayout(6,1));JPanel jp1 = new JPanel();JPanel jp2 = new JPanel();JPanel jp3 = new JPanel();JF.setTitle("User Login");JF.setBounds(300, 300, 400, 200);JP.add(jp1);JP.add(User);JP.add(jp2);JP.add(PWD);JP.add(jp3);JP.add(NOTE);logbtnTool.add(login);logbtnTool.add(sign);JF.add(JP,BorderLayout.NORTH);JF.add(logbtnTool,BorderLayout.SOUTH);JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JF.setVisible(true);login.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//denglutry {islogin = 8;dos.write(islogin);username = User.getText();
//					System.out.println(username );pwd = PWD.getText();dos.writeUTF(username);dos.writeUTF(pwd);note = dis.readUTF();if(note.equals("1")) {create.setEnabled(true );save.setEnabled(true );open.setEnabled(true );del.setEnabled(true );find.setEnabled(true );upload.setEnabled(true );download.setEnabled(true );JF.setVisible(false);JOptionPane.showMessageDialog(null, "【成功】", "登陆成功", JOptionPane.ERROR_MESSAGE);}else if(note.equals("2")){JOptionPane.showMessageDialog(null, "【失败】", "登陆失败", JOptionPane.ERROR_MESSAGE);NOTE.setText("重新登陆");}User.setText("");PWD.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});sign.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//zhucetry {issign = 9;dos.write(issign);username = User.getText();pwd = PWD.getText();dos.writeUTF(username);dos.writeUTF(pwd);note = dis.readUTF();NOTE.setText(note);JOptionPane.showMessageDialog(null, "【成功】", "注册成功", JOptionPane.ERROR_MESSAGE);User.setText("");PWD.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});//		if(note == "") {
//			JOptionPane.showMessageDialog(null, "【FUCK】", "FUCK", JOptionPane.ERROR_MESSAGE);
//		}}//保存笔记方法public void Save () throws UnknownHostException, IOException {issave = 1;//获取笔记内容str = Show.getText();//传输笔记内容dos.write(issave);dos.writeUTF(str);Show.setText("");Show.setEditable(false);}
//	确认笔记弹窗方法public void tanchuang () throws IOException {issave = 2;String savename = JOptionPane.showInputDialog("Please input name");dos.write(issave);dos.writeUTF(savename);List.append(dis.readUTF()+"\n");Note.append(df.format(new Date())+dis.readUTF()+"创建成功"+"\n");}//打开笔记方法public void Open () throws IOException {isopen = 3;dos.write(isopen);String openname = JOptionPane.showInputDialog("Please input filename you want to open");dos.writeUTF(openname);Show.append(dis.readUTF());Note.append(df.format(new Date())+openname+"读取成功"+"\n");}//删除笔记方法public void Del () throws IOException {isdel = 4;dos.write(isdel);String delname = JOptionPane.showInputDialog("Please input filename you want to delete");dos.writeUTF(delname);Note.append(df.format(new Date())+dis.readUTF());}//查询笔记方法//查找笔记,为每个用户创建一个记录文件名的文件public void Find () {}//上传笔记方法//上传笔记,简单的上传可以实现,想实现资源管理器直接选择文件public void Upload () {isupload = 6;}//下载笔记方法//下载笔记,简单的下载可以实现,想实现调用资源管理器直接下载public void Download () {}public static void main(String[] args) {Client c = new Client();c.init();}}

服务器端代码

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;public class Server extends JFrame{//设置服务器窗口——一个框框JTextArea serverTa = new JTextArea();//创建服务器窗口——两个按钮private JPanel btnTool = new JPanel();private JButton starBtn = new JButton("start");private JButton stopBtn = new JButton("stop");//设置服务器端socket的端口号private static final int PORT = 8888;//创建服务器端socketprivate ServerSocket ss = null;private Socket s = null;//设置读入数据private String Str = ""; private String neirong ="";private String name ="";private String resend ="";//设置用户名数组private String[] User = new String[] {"","","","","","","","","",""};private String[] PWD = new String[]{"","","","","","","","","",""};//改进,储存在文件中可以永久保存//设置服务器启动的标志private boolean isStart = false;private int i = 0;private int k = 0;//初始化服务器窗口public void init() {//设置窗口标题this.setTitle("ServerView");//设置窗口样式this.add(serverTa,BorderLayout.CENTER);btnTool.add(starBtn);btnTool.add(stopBtn);this.add(btnTool,BorderLayout.SOUTH);//设置窗口总大小this.setBounds(0, 0, 150, 500);//设置serverTa不可输入serverTa.setEditable(false);if(isStart) {serverTa.append("Server started.\\n");}else {serverTa.append("Server not start."+"\n");}//监听开始按钮,启动服务器starBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {if(ss==null) {ss=new ServerSocket(PORT);}isStart = true;serverTa.append("Server started."+"\n");}catch(IOException e1) {e1.printStackTrace();}			}});//监听停止按钮,关闭服务器stopBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//关机isStart = false;try {if(s!=null) {s.close();}if(ss!=null) {ss.close();}serverTa.append("Server stopped");System.exit(0);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});//监听窗口(叉号)this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {//关机isStart = false;try {if(s!=null) {s.close();}if(ss!=null) {ss.close();}serverTa.append("Server stopped");System.exit(0);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});this.setVisible(true);try {startServer();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}
}/*服务器启动方法*/public void startServer() throws IOException {ss = new ServerSocket(PORT);isStart = true;//判断是点击了哪个按钮做出相应的函数调用s= ss.accept();DataInputStream dis = new DataInputStream(s.getInputStream());DataOutputStream dos = new DataOutputStream(s.getOutputStream());//		serverTa.append(s.getInetAddress()+"|"+s.getPort()+"说:"+ String.valueOf(flag) + "\n");while (isStart) {int flag = dis.read();switch (flag) {case 1:Str = dis.readUTF();Receive(Str);break;case 2:Str = dis.readUTF();Save(Str);Write (neirong,name);dos.writeUTF(resend);dos.writeUTF(resend);break;case 3:Str = dis.readUTF();Open(Str);dos.writeUTF(resend);break;case 4:Str = dis.readUTF();i = Del(Str);if(i==0)dos.writeUTF("文件删除成功\n");dos.writeUTF("文件删除失败\n");break;case 5:break;case 6:break;case 7:break;case 8:Check(dis,dos);break;case 9:Add(dis,dos);break;default:break;}}}public static String getType(Object o) { //获取变量类型方法return o.getClass().toString(); //使用int类型的getClass()方法}public void Check(DataInputStream Dis,DataOutputStream Dos) {//在数组中找到name,在对应数组中找到pwd检查;String u = "";String p = "";int m = 0;try {u = Dis.readUTF();p = Dis.readUTF();
//			System.out.println(getType(u));
//			System.out.println(getType(User[2]));
//			if(u.equals(User[2])) {
//				System.out.println(User[2]);
//			}} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}for(int j=0;j < 10;j++) {if(User[j].equals(u) && PWD[j].equals(p)&& (!u.equals(""))) {k = 1;m=j;break;}else {
//				System.out.println(j+"----");}	}try {if(k == 1) {serverTa.append(u+m+"用户登陆成功" + "\n");Dos.writeUTF("1");}else {serverTa.append(u+m+"用户登陆失败" + "\n");Dos.writeUTF("2");}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}//注册public void Add(DataInputStream Dis,DataOutputStream Dos) {String u = "";String p = "";int n = 0;try {u = Dis.readUTF();p = Dis.readUTF();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}for(int j = 0;j<10;j++) {if(User[j].equals("")) {User[j] = u;PWD[j] = p;n = j;serverTa.append(u+n+"用户注册成功" + "\n");break;}else {continue;}}try {Dos.writeUTF("注册成功");System.out.println("成功");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//服务器接受数据方法public void Receive(String restr) {//保存输入信息为文件neirong = restr;serverTa.append("文件内容:"+restr + "\n");System.out.println(s.getInetAddress()+"|"+s.getPort()+"说:"+restr + "\n");}//接受文件名public void Save (String restr) {//保存输入信息为文件名name = restr;serverTa.append("文件名:"+restr + "\n");System.out.println(s.getInetAddress()+"|"+s.getPort()+"说:"+restr + "\n");}//保存文件public void Write (String nei,String nam) {FileWriter writer;try {writer = new FileWriter("E:/"+ nam );writer.write(nei);writer.flush();writer.close();resend = nam;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//打开文件public void Open (String opnm) throws IOException {serverTa.append("打开文件:"+opnm + "\n");File file = new File("E:/"+opnm);FileInputStream fin = new FileInputStream(file);Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];fin.read(filecontent);String  mid = new String(filecontent);resend = mid;fin.close();
//        System.out.println(resend);}public int Del (String delnm) {serverTa.append("删除文件:"+delnm + "\n");File file = new File("E:/"+delnm);if(file.delete()){serverTa.append(file.getName() + " 文件已被删除!");return 0;}else{serverTa.append("文件删除失败!");return 1;}}public static void main(String[] args) {Server se = new Server();se.init();}}

运行展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

相关文章

【Java高级】初探socket编程 ——JavaSocket连接与简单通信

新学期生活开始一段时间了&#xff0c;要继续学习一些新的技术&#xff08;这里指socket /doge&#xff09;&#xff0c;目标是尝试完成一个在线即时聊天的小程序&#xff08;尽量不咕&#xff09;。会更新一系列socket编程的技术文章&#xff0c;欢迎关注交流~ 那么千里之行&…

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

服务端&#xff1a; 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.InputStr…

JAVA 网络编程 Socket

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

初识Java Socket编程

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

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

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

递归下降文法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.根据文法的产生式规则消除左递归&#xff0c;提取公共左因子构造出相应的递归下降分析器。 二、实验内容 根据课堂讲授的形式化算法&#xff0c;编制程序实现递归下降分析器&#xff0c;能对常见…

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

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

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

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

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

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

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

一. 实验概述 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 设计说明&#xff1a;终结符号 i 为用户定义的简单变量&#xff0c;即标识符的定义。 2 实验要求 …

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

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

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

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

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

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

递归下降分析法

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

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

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

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

目录 一、实验目的和要求 二、实验内容 三、实验环境 四、实验步骤 1、语法分析所依据的文法&#xff1b; 2、给出消除左递归及提取左公因子的文法&#xff1b; 五、测试要求 六、实验步骤 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;在提供错误信息方面也…