• JavaSocket通信(双向,有界面)


    服务端:

    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() {
    
    			@Override
    			public 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() {
    
    			@Override
    			public 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();
    	}
    }
    


  • 相关阅读:
    Web APIs——DOM
    案例:动态生成表格
    案例:简单版发布留言功能
    案例:下拉菜单功能
    案例:tab栏切换功能(原生JS写法)
    时间复杂度
    ubuntu下安装LNMP
    btree索引和hash索引的区别
    StandardServer.await: Invalid command 'GET / HTTP/1.1' received
    MySQL----触发器
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2999653.html
Copyright © 2020-2023  润新知