多平台统一管理软件接口,如何实现多平台统一管理软件接口
366
2023-01-24
java实现简单聊天室单人版
本文实例为大家分享了java实现简单聊天室的具体代码,供大家参考,具体内容如下
先整理下思路:
1.创建一个通信服务端,传入端口号和相关的流后等待客户端连接,并初始化图形界面。
2.创建一个JFrame,用于写出聊天的界面,这里界面名称由其他类传入。
3.把客户端创建的方法写进JFrame(当然这里很粗糙的方法)
4.设置按钮的监听事件,发送消息和离线功能
首先创建一个服务端的类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.jero.jframe.ChatSocketJFrame;
//创建服务端
public class ChatServerSocket{
//构造初始化方法
public ChatServerSocket(String name,int port) throws IOException{
//创建Socket服务连接对象
ServerSocket serverSocket = new ServerSocket(port);
//等待客户端连接
Socket client = serverSockhttp://et.accept();
//初始化聊天界面
try {
new ChatSocketJFrame(name,client);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//关闭流
serverSocket.close();
}
public static void main(String[] args) throws Exception{
new ChatServerSocket("服务端",8001);//启动服务端,指定网名和端口
}
}
package com.jero.jframe;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.jscrollPane;
import javax.swing.border.EmptyBorder;
import com.jero.socket.ChatServerSocket;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
public class ChatSocketJFrame extends JFrame implements ActionListener {
private Socket socket;
private String name;
private JButton BT_SEND,BT_LEAVE,BT_LOGIN;
private JTextArea textArea;
private JPanel contentPane;
private JTextField textField;
private PrintWriter cout;
/**
* Launch the application.
* @throws Exception
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException, Exception {
//实例化界面以及客户端
new ChatSocketJFrame("客户端","127.0.0.1",8001);
}
/**
* Create the frame.
*/
public ChatSocketJFrame(String name, Socket socket)throws Exception, IOException {
//聊天室界面
super("聊天室"+name+" "+InetAddress.getLocalHost()+" "+socket.getPort());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 733, 519);
this.textArea = new JTextArea();
this.textArea.setEditable(false);
this.getContentPane().add(new JScrollPane(this.textArea));
JPanel panel = new JPanel();
this.getContentPane().add(panel, "South");
this.textField = new JTextField(16);
panel.add(this.textField);
BT_SEND = new JButton("发送");
panel.add(BT_SEND);
BT_SEND.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("按钮已点击");
cout.println(name+"说: "+textField.getText()+"\n");
textArea.append("我说: "+textField.getText()+"\n");
textField.setText("");
}
});
BT_LEAVE = new JButton("离线");
panel.add(BT_LEAVE);
BT_LEAVE.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
textArea.append("我离线");
cout.println(name+"离线\n"+"bye");
BT_LEAVE.setEnabled(false);
BT_SEND.setEnabled(false);
}
});
this.setVisible(true);
//开始创建通信
this.socket = socket;
this.name = name;
//获得Socket的输出流并立即刷新
this.cout = new PrintWriter(socket.getOutputStream(),true);
//把网名传给对方
this.cout.println(name);
//获得Socket对象的输入流,创建字符输入流
BufferedReader buff = new BufferedReader(new InputStreamhttp://Reader(socket.getInputStream()));
//接受对方的网名
String aline = buff.readLine();
//显示对方发送的内容
textArea.append("连接"+aline+"成功!!\n");
aline = buff.readLine();
//如果dUzbGEnV内容不为空并且对方不离线,则相互传送消息
while(aline!=null&&!aline.equals("bye")){
textArea.append(aline+"\r\n");
aline = buff.readLine();
}
//当对方离线时,关闭所有的流
buff.close();
cout.close();
socket.close();
//把按钮设置为不可操作
BT_SEND.setEnabled(false);
BT_LEAVE.setEnabled(false);
}
/**
* @wbp.parser.constructor
*/
public ChatSocketJFrame(String name,String host,int port) throws UnknownHostException, IOException, Exception{
//创建客户端
this(name,new Socket(host,port));
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//可以把动作监听写进此函数,这个就不演示了
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~