java代码与人机聊天 java代码与人机聊天的关系

你好,你有用java编写的聊天室的代码吗,基于c/s架构的

服务端 用户名 y 密码 1 客户端代码在我的评论里,这敲不了那么多字,没办法。

在雄县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站设计、外贸营销网站建设 网站设计制作定制网站开发,公司网站建设,企业网站建设,品牌网站建设,成都营销网站建设,外贸营销网站建设,雄县网站建设费用合理。

登陆实现类:class Login

package com.server;

import java.awt.Color;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class Login {

boolean f=false;//按登录时设置的一个标志

private JFrame frame = new JFrame("Welcome To MLDN") ;

//设置窗体

private JButton submit = new JButton("登陆");//设置登录按钮

private JButton reset = new JButton("重置");//设置重置按钮

private JLabel nameLab = new JLabel("服务器:") ;//标签实例化

private JLabel passLab = new JLabel("密 码:"); //标签实例化

private JLabel infoLab = new JLabel("服务器登陆系统"); //标签实例化

private JTextField nameText = new JTextField(10);//单行文本输入条

private JPasswordField passText = new JPasswordField() ;//单行密码文本输入条

public Login(){//登录窗口构造方法

Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,12); //设置字体

infoLab.setFont(fnt) ; // 设置标签的显示文字

submit.addActionListener(new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==submit){ //判断触发器源是否是提交按钮

String tname = nameText.getText() ; //得到输入的用户名

String tpass = new String(passText.getPassword()) ;//得到输入的密码,此时通过getPassageword()方法返回的是字符数组

LoginCheck log = new LoginCheck(tname,tpass) ;//实例化LoginCheck对象,传入输入的用户名和密码

if(log.validate()){//对用户名和密码进行验证

try{ //线程异常处理try

Thread.sleep(2000); //2秒后打开聊天窗口

f=true; //登录成功后的表示项为true

frame.dispose(); //关闭本窗口

}catch(Exception e1){//异常获取

e1.printStackTrace();

}

}else{

infoLab.setText("登陆失败,错误的用户名或密码!") ;//登录失败

}

}

}

});

reset.addActionListener(new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==reset){ //判断触发器源是否是提交按钮

nameText.setText(""); //设置文本框中的内容

passText.setText(""); //设置文本框中的内容

infoLab.setText("服务器登陆系统"); //恢复标签显示

}

}

});

frame.addWindowListener(new WindowAdapter(){//加入窗口监听

public void windowClosing(WindowEvent e){ }

}); // 加入事件

frame.setLayout(null); //使用绝对定位

nameLab.setBounds(5,5,60,20); //设置标签的位置及大小

passLab.setBounds(5,30,60,20); //设置标签的位置及大小

infoLab.setBounds(5,65,220,30); //设置标签的位置及大小

nameText.setBounds(65,5,100,20); //设置文本域的位置及大小

passText.setBounds(65,30,100,20); //设置密码域的位置及大小

submit.setBounds(165,5,60,20); //设置按钮的位置及大小

reset.setBounds(165,30,60,20); //设置按钮的位置及大小

frame.add(nameLab); //向窗体加入标签

frame.add(passLab); //向窗体加入标签

frame.add(infoLab); //向窗体加入标签

frame.add(nameText); //向窗体加入文本框

frame.add(passText); //向窗体加入密码框

frame.add(submit); //向窗体加入按钮

frame.add(reset) ;//向窗体加入按钮

frame.setSize(280,130); //设置窗体大小

frame.getContentPane().setBackground(Color.green) ;//设置窗体的背景颜色

frame.setLocation(300,200) ;//设置窗体在电脑桌面上的位置

frame.setVisible(true); //显示窗口

while(f==false){ //当登录失败时,一直循环运行,

}

new MyServer();//显示窗体页面

}

}

验证登陆实现类 class LoginCheck

package com.server;

public class LoginCheck {

private String name ;//用户名

private String password ;//密码

//构造方法

public LoginCheck(String name,String password){

this.name = name ;//传递用户名

this.password = password ;//传递密码

}

//验证用户名和密码

public boolean validate(){

//验证方法

if("y".equals(name)"1".equals(password)){ //判断用户名和密码是否正确

return true; //返回true

}else{

return false ;//返回false

}

}

}

package com.server;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.text.DateFormat;

import java.util.Date;

import javax.swing.*;

聊天实现类 class MyServer

public class MyServer {

protected JLabel lab10;

// 全体变量,做传递的一个组件

String s = "已经成功连接";

// 初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量

// 构造方法

public MyServer(){

try{//异常处理

JFrame frame=new JFrame("服务器窗口");

//设置窗体

frame.setLayout(null);

//让布局管理器为空,使用绝对定位

Font fnt=new Font("Serief",Font.PLAIN,40);//字体设置

Font fnt1=new Font("Serief",Font.PLAIN,20);//字体设置

//我的用户名显示

JLabel lab1=new JLabel("服务器名:",JLabel.LEFT);

//标签实例化,文本左对齐

lab1.setBounds(8, 10, 100, 20);

//设置组件位置及大小

frame.add(lab1);

//添加组件

JTextField text2=new JTextField(30); //单行文本输入组件

text2.setBounds(150, 10, 200, 20);//设置组件位置及大小

text2.setEnabled(false);//文本条不可编辑

text2.setText("笑笑聊天室");//输入内容

text2.setFont(fnt1);//设置字体

frame.add(text2);//添加组件

//服务器IP显示

JLabel lab2=new JLabel("当前服务器IP:",JLabel.LEFT);

//标签实例化,文本左对齐

lab2.setBounds(8, 45, 100, 20);//设置组件位置及大小

frame.add(lab2);//添加组件

JTextField text3=new JTextField(30);//单行文本输入组件

text3.setBounds(150, 45, 200, 20);//设置组件位置及大小

text3.setEnabled(false);

//文本不可编辑

text3.setText("127.0.0.1");//输入内容

text3.setFont(fnt1);//设置字体

frame.add(text3);

//添加组件

//服务器端口显示

JLabel lab3=new JLabel("当前服务器端口:",JLabel.LEFT);

//标签实例化,文本左对齐

lab3.setBounds(8, 80, 100, 20);//设置组件位置及大小

frame.add(lab3);//添加组件

JTextField text4=new JTextField(30);//单行文本输入组件

text4.setBounds(150, 80, 200, 20);//设置组件位置及大小

text4.setEnabled(false);//文本不可编辑

text4.setText("8888");//输入内容

text4.setFont(fnt1);//设置字体

frame.add(text4);//添加组件

//聊天记录显示

JLabel lab4=new JLabel("聊天记录如下:",JLabel.LEFT);

//标签实例化 文本左对齐

lab4.setBounds(8, 115, 100, 20);//设置组件位置及大小

frame.add(lab4);//添加组件

final JTextArea text1=new JTextArea();//多行文本输入组件

text1.setEnabled(false);//文本不可编辑

text1.setLineWrap(true);//自动换行

JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //设置滚动条,水平和垂直滚动条始终显示

scr.setBounds(8, 150, 450, 350);//设置组件位置及大小

frame.add(scr);//添加组件

//聊天输入窗口及确定

JLabel lab5=new JLabel("请输入聊天内容:",JLabel.LEFT); //标签实例化,文本左对齐

lab5.setBounds(8, 500, 100, 20);//设置组件位置及大小

frame.add(lab5);//添加组件

final JTextArea text5=new JTextArea();//多行文本输入组件

text5.setLineWrap(true);//自动换行

JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

scr2.setBounds(150, 500, 300, 50);//设置组件位置及大小

frame.add(scr2);//添加组件

final JButton but=new JButton("确定");//设置确定按钮

but.setFont(fnt);//添加字体设置

but.setBounds(480, 500, 200, 50);//设置组件位置及大小

but.addActionListener(

new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==but){ //判断触发器源是否是提交按钮

text1.append("笑笑: "+lab10.getText()+"\n ");//在聊天记录上添加文本

text1.append(text5.getText()+"\n"); //将输入的聊天内容输出在聊天记录上

s=text5.getText(); //得到聊天内容

text5.setText(""); // 将聊天窗口内容设置为空

}

}

});

frame.add(but);//添加组件

//当前时间显示

JLabel lab7=new JLabel("时间显示:",JLabel.LEFT);//标签实例化,文本左对齐

lab7.setBounds(450, 20, 100, 20);//设置组件位置及大小

frame.add(lab7);//添加组件

DateFormat df=DateFormat.getDateTimeInstance();//取得系统时间

String df2= df.format(new Date()); //将时间转换成字符串

JLabel lab8=new JLabel(df2,JLabel.LEFT);//标签实例化,文本左对齐

lab8.setBounds(520, 20, 130, 20);//设置组件位置及大小

frame.add(lab8);//添加组件

lab10=lab8; //传递时间显示,以便能在聊天记录上显示记录时间

new Time(lab8); //使时间动态显示

//用户列表显示

JLabel lab6=new JLabel("用户列表:",JLabel.LEFT);//标签实例化,文本左对齐

lab6.setBounds(500, 40, 100, 20);//设置组件位置及大小

frame.add(lab6);//添加组件

JTextArea text6=new JTextArea();//标签实例化,文本左对齐

text6.setEnabled(false);//文本不可编辑

text6.setLineWrap(true);//自动换行

JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

scr3.setBounds(460, 70, 220, 420);//设置组件位置及大小

frame.add(scr3);//添加组件

//窗口的属性

frame.setSize(700,600);//窗口大小

frame.getContentPane().setBackground(Color.pink);//窗口的背景颜色

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时关闭程序

frame.setLocation(100,50);//在电脑桌面上出现的位置

frame.setVisible(true);//显示窗口

//连个窗口连接

//建立Server Socket并等待连接请求

ServerSocket server =new ServerSocket(8889);

Socket socket=server.accept();

//连接建立,通过Socket获取连接上的输入/输出流

BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

final PrintWriter out =new PrintWriter(socket.getOutputStream());

//先读取Client发送的数据,然后从标准输入读取数据发送给Client当接收到bye时关闭连接

String s1="",s2="";

//标志字符串,作为传递字符串使用

//得到其他窗口传递的字符串,并判断是否结束

while(!(s1=in.readLine()).equals("bye")){

text6.setText("可可在线"); //当连接成功是在用户列表中 输出用户名字

if(!s1.equals("")){ //如果传递的字符串不为 空

text1.append("可可: "+lab10.getText()+"\n ");//在聊天记录上添加文本

text1.append(s1+"\n"); //将输入的聊天内容输出在聊天记录上

}

s2=s;//将在聊天窗口中得到的字符串传递给输出字符串

for(;s2.equals("")||s2.equals(null);s2=s){//当传递的字符串为空时等待用户输入聊天内容

}

s="";//将在聊天窗口中得到的字符串设为空

if(!s2.equals("")!s2.equals(null)){// s2不为空时做

out.println(s2); //向其他窗口输出字符串

}

out.flush();//输出聊天内容

}

//关闭连接

in.close();

out.close();

socket.close();

server.close();

}catch(Exception e){

}

}

//main函数

public static void main(String args[]){

new Login();//登录实现 } }

}

}

时间类 class Time

package com.server;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JLabel;

import javax.swing.Timer; //时间类

public class Time {

public Time(JLabel time){

//构造方法 this.setTimer(time);

//设置时间

}

public void setTimer(JLabel time){

//设置时间方法

final JLabel varTime = time;

//传递组件

Timer timeAction = new Timer(1000, new ActionListener() {

//时间监听

public void actionPerformed(ActionEvent e) {

long timemillis = System.currentTimeMillis();//得到系统时间

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//转换日期显示格式

varTime.setText(df.format(new Date(timemillis)));//输出得到的时间

}

});

timeAction.start(); //开启线程

}

}

急需一个java编程实现的简单聊天窗口代码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class ClientDemo01 {

public static void main(String[] args){

JFrame f=new JFrame("AA");

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JTextArea ta=new JTextArea(15,30);

ta.setEditable(false); //文本域只读

JScrollPane sp=new JScrollPane(ta); //滚动窗格

JTextField tf=new JTextField(20);

JButton b=new JButton("发送");

p1.add(sp);

p2.add(tf);

p2.add(b);

f.add(p1,"Center");

f.add(p2,"South");

f.setBounds(300,300,360,300);

f.setVisible(true);

f.setResizable(false);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Socket socket=null;

BufferedInputStream bis=null;

BufferedOutputStream bos=null;

try{

socket=new Socket("192.168.0.4",5000);

bis=new BufferedInputStream(socket.getInputStream());

bos=new BufferedOutputStream(socket.getOutputStream());

MyThread01 mt=new MyThread01(bis,ta);

mt.start();

}catch(Exception e){

e.printStackTrace();

}

b.addActionListener(new ButtonActionListener01(tf,ta,bos));

}

}

class ButtonActionListener01 implements ActionListener{

JTextField tf;

JTextArea ta;

BufferedOutputStream bos;

public ButtonActionListener01(JTextField tf,JTextArea ta,BufferedOutputStream bos){

this.tf=tf;

this.ta=ta;

this.bos=bos;

}

public void actionPerformed(ActionEvent e){

String message=tf.getText();

if(!message.equals("")){

tf.setText(""); //清空文本框

ta.append("AA:"+message+"\n"); //添加到文本域并换行

try{

bos.write(message.getBytes());

bos.flush();

}catch(Exception ex){

System.out.println("发送失败");

}

}

}

}

class MyThread01 extends Thread{

BufferedInputStream bis;

JTextArea ta;

public MyThread01(BufferedInputStream bis,JTextArea ta){

this.bis=bis;

this.ta=ta;

}

public void run(){

try{

while(true){

byte[] b=new byte[100];

int length=bis.read(b);

String message=new String(b,0,length);

ta.append("BB:"+message+"\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

} import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class ServerDemo01{

public static void main(String[] args){

JFrame f=new JFrame("BB");

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JTextArea ta=new JTextArea(12,30); //文本域,第一个参数为行数,第二个参数为列数

ta.setEditable(false); //文本域只读

JScrollPane sp=new JScrollPane(ta); //滚动窗格

JTextField tf=new JTextField(20);

JButton b=new JButton("发送");

p1.add(sp);

p2.add(tf);

p2.add(b);

f.add(p1,"Center");

f.add(p2,"South");

f.setBounds(300,300,360,300);

f.setVisible(true);

f.setResizable(false);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ServerSocket server=null;

Socket socket=null;

BufferedInputStream bis=null;

BufferedOutputStream bos=null;

try{

server=new ServerSocket(5000);

//ta.append("等待AA连接...\n");

socket=server.accept();

//ta.append("AA已连接\n");

bis=new BufferedInputStream(socket.getInputStream());

bos=new BufferedOutputStream(socket.getOutputStream());

MyThread1 mt=new MyThread1(bis,ta);

mt.start();

}catch(Exception e){

e.printStackTrace();

}

b.addActionListener(new ButtonActionListener1(tf,ta,bos));

}

}

class ButtonActionListener1 implements ActionListener{

JTextField tf;

JTextArea ta;

BufferedOutputStream bos;

public ButtonActionListener1(JTextField tf,JTextArea ta,BufferedOutputStream bos){

this.tf=tf;

this.ta=ta;

this.bos=bos;

}

public void actionPerformed(ActionEvent e){

String message=tf.getText(); //获取文本框中的内容

if(!message.equals("")){

tf.setText(""); //清空文本框

ta.append("BB:"+message+"\n"); //添加到文本域并换行

try{

bos.write(message.getBytes());

bos.flush();

}catch(Exception ex){

System.out.println("发送失败!");

}

}

}

}

class MyThread1 extends Thread{

BufferedInputStream bis;

JTextArea ta;

public MyThread1(BufferedInputStream bis,JTextArea ta){

this.bis=bis;

this.ta=ta;

}

public void run(){

try{

while(true){

byte[] b=new byte[100];

int length=bis.read(b);

String message=new String(b,0,length);

ta.append("AA:"+message+"\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

}

java多人聊天一般都是怎么搭建的?

Java多人聊天可以使用Java的Socket编程实现,主要的思路是:使用服务器来维护所有客户端的连接,并将客户端之间的聊天信息进行转发。

具体的实现步骤如下:

创建服务器端:使用ServerSocket类创建一个服务器端,并监听指定的端口,等待客户端的连接。

创建客户端:使用Socket类创建一个客户端,并连接到服务器端。

实现聊天功能:客户端和服务器端之间可以通过输入和输出流进行通信,客户端将聊天信息发送给服务器,服务器再将其转发给其他客户端。

处理异常:在实现聊天功能时,需要注意处理可能出现的异常,例如连接异常、输入输出异常等等。

一个简单的Java多人聊天程序的代码框架如下:

服务器端:

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

public class ChatServer {

private ServerSocket serverSocket;

private ArrayListClientHandler clients;

public ChatServer(int port) throws IOException {

serverSocket = new ServerSocket(port);

clients = new ArrayListClientHandler();

System.out.println("服务器已启动,等待客户端连接...");

}

public void start() throws IOException {

while (true) {

Socket socket = serverSocket.accept();

ClientHandler client = new ClientHandler(socket, this);

clients.add(client);

client.start();

}

}

public void broadcast(String message) {

for (ClientHandler client : clients) {

client.sendMessage(message);

}

}

public void removeClient(ClientHandler client) {

clients.remove(client);

}

public static void main(String[] args) throws IOException {

ChatServer server = new ChatServer(12345);

server.start();

}

}

客户端:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class ChatClient {

private Socket socket;

private BufferedReader reader;

private PrintWriter writer;

private String name;

public ChatClient(String serverAddress, int port, String name) throws IOException {

socket = new Socket(serverAddress, port);

reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

writer = new PrintWriter(socket.getOutputStream(), true);

this.name = name;

}

public void start() throws IOException {

System.out.println("欢迎来到聊天室!");

new Thread(new IncomingMessageHandler()).start();

new Thread(new OutgoingMessageHandler()).start();

}

private class IncomingMessageHandler implements Runnable {

@Override

public void run() {

try {

while (true) {

String message = reader.readLine();

if (message == null) {

break;

}

System.out.println(message);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

close();

}

}

}

private class OutgoingMessageHandler implements Runnable {

@Override

public void run() {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

try {

while (true) {

String message = reader.readLine();

if (message.equals("quit")) {

break;

}

writer.println(name + ": " + message);

}

} catch (IOException e) {

e.printStackTrace;

} finally {

close();

}

}

}


标题名称:java代码与人机聊天 java代码与人机聊天的关系
文章链接:http://scjbc.cn/article/ddojhgj.html

其他资讯