https://www.myziyuan.com/

- mmnn
- import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JButton;import java.net.*;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.*;@SuppressWarnings("serial")public class EasyQQ extends JFrame {private JPanel jContentPane = null;private JTextField message = null;private JButton sendButton = null;private JTextArea showMsg = null;private int personalPort;private JLabel ipLabel = new JLabel("IP:");private JLabel portLabel = new JLabel("Port:");private JTextField IP = new JTextField();private JTextField PORT = new JTextField(""+personalPort);//没用。表达连接的端口一样的意思。private JButton testConn = new JButton("测试");private JButton cleaner = new JButton("清空消息框");{ ipLabel.setBounds(100,50,50,30); IP.setBounds(150, 50, 80, 30); portLabel.setBounds(250, 50, 50, 30); PORT.setBounds(300, 50, 80, 30); testConn.setBounds(400, 50, 100, 30); cleaner.setBounds(100,250,150,30); testConn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String url = IP.getText(); try { int port = Integer.parseInt(PORT.getText()); if(openClient(url, port))showMsg.setText(showMsg.getText()+"\n连接成功"); else showMsg.setText(showMsg.getText()+"\n连接失败"); } catch (NumberFormatException e1) { showMsg.setText(showMsg.getText()+"\n请输入数字型端口号!"); } } }); cleaner.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showMsg.setText(""); } });}/*** This method initializes jTextField** @return javax.swing.JTextField*/private JTextField getJTextField() { if (message == null) { message = new JTextField(); message.setBounds(100,300,300,30); } return message;}private JTextArea getJTextArea() { if (showMsg == null) { showMsg = new JTextArea(); showMsg.setBackground(Color.orange); showMsg.setBounds(100,80,400,150); } return showMsg;}/*** This method initializes sendButton** @return javax.swing.JButton*/ServerSocket ss;Socket get;PrintWriter out ;Socket send;BufferedReader in;private JButton getsendButton() { if (sendButton == null) { sendButton = new JButton(); sendButton.setBounds(400,300,100,30); sendButton.setText("发送"); sendButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { send(); } }); message.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER)send(); } }); } return sendButton;}/*** @param args*/public static void main(String[] args) { new EasyQQ(6666);}/*** This is the default constructor*/public EasyQQ(int personalPort) { this.personalPort = personalPort;// if(!openClient())showMsg.append("未找到指定服务器端口!\n");// else showMsg.append("找到指定服务器端口!"+serverURL+":"+serverPort+"\n"); new Thread(){ public void run(){ for (int i = EasyQQ.this.personalPort; i < 9999; i++) { try { ss = new ServerSocket(i);// System.out.println("本地端口:"+i+" 开启成功!"); IP.setText("0.0.0.0"); PORT.setText(""+i); EasyQQ.this.setTitle("EasyQQ@shy2850-当前端口:"+i); send = ss.accept(); break; } catch (IOException e) {// System.out.println("本地端口:"+i+" 开启失败!"); } } } }.start(); this.setContentPane(getJContentPane()); this.setBounds(400,300,600,400); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true);}private boolean openClient(String serverURL,int serverPort){ try { get = new Socket(serverURL,serverPort); new Thread(){ public void run(){ try{ in = new BufferedReader(new InputStreamReader(get.getInputStream())); while(true){ String msg; if((msg=in.readLine()).length() != 0) showMsg.append("\n对方:"+msg); Thread.sleep(500); } }catch(Exception ew){// System.out.println(ew); } } }.start(); return true; } catch (Exception e) {// System.out.println("建立连接时的URL或端口有误!"); showMsg.setText( showMsg.getText()+"失败IP:"+serverURL); return false; } }private void send(){ try { showMsg.setText(showMsg.getText()+"\n自己:"+message.getText()); out = new PrintWriter(new OutputStreamWriter(send.getOutputStream()),true); out.println(message.getText()+"\n"); message.setText(""); out.flush(); try{ Thread.sleep(300); }catch(Exception ee){ System.out.println("延时异常!"); } } catch (Exception e1) { showMsg.setText(showMsg.getText()+"\n发送失败!");// System.out.println("发送端口不存在!"); }}/*** This method initializes jContentPane** @return javax.swing.JPanel*/private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(this.ipLabel); jContentPane.add(this.IP); jContentPane.add(this.portLabel); jContentPane.add(this.PORT); jContentPane.add(this.testConn); jContentPane.add(this.cleaner); JScrollPane jsp = new JScrollPane(getJTextArea()); jsp.setBounds(100,80,400,150); jContentPane.add(jsp); jContentPane.add(getJTextField()); //jContentPane.add(getJButton(), null); jContentPane.add(getsendButton()); } return jContentPane;}} // @jve:decl-index=0:visual-constraint="122,25"
- 2022-01-06 09:58:14
- qian
- 即时聊天的实例是XMPP,基于此协议,有一组Java开源OpenFire,可以快速构建即时聊天服务器。但是现在有许多云即时消息服务。例如,Lendlink云通信,云,Wen,Rong Yun,它提供API,我们很容易根据他的API开发实现我们的即时聊天软件。服务器,服务器不必管理自己的,这大大节省了成本和开发周期。这些云服务基本服务是免费的。建议实施第三方云服务。
- 2022-01-06 09:56:56
- 葬爱落雨
- 易语言制作聊天室,其实很简单。两个程序。一为服务器。一为客户端。服务器要程序中要写个列表,把取回的客户放进去,如果某个客户发出一句话什么的取回数据发送到所有客户。基本就是着点原理,我原来写过个,源码之前换系统格掉了
- 2022-01-06 09:56:56