java聊天代碼 java在線聊天

急需一個java編程實現(xiàn)的簡單聊天窗口代碼

import java.awt.*;

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計,赫章網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:赫章等地區(qū)。赫章做網(wǎng)站價格咨詢:13518219792

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("發(fā)送");

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("發(fā)送失敗");

}

}

}

}

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); //文本域,第一個參數(shù)為行數(shù),第二個參數(shù)為列數(shù)

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

JScrollPane sp=new JScrollPane(ta); //滾動窗格

JTextField tf=new JTextField(20);

JButton b=new JButton("發(fā)送");

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(); //獲取文本框中的內(nèi)容

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

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

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

try{

bos.write(message.getBytes());

bos.flush();

}catch(Exception ex){

System.out.println("發(fā)送失敗!");

}

}

}

}

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的聊天窗口文件源代碼,不要很復雜,只要能運行,聊天就行了!我用淘寶金幣換,謝

話說網(wǎng)上真的好多啊...

package client;

import java.awt.Color;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class ClientFrame extends JFrame{

private JTextArea allmsg;

private JTextField welcome,copyright,chatmsg;

private JButton send;

private JScrollPane js;

private boolean isConnected = true;

public DataOutputStream out;

public DataInputStream in;

public Socket s = null;

String nic; /* -- 保存用戶昵稱 --*/

/**

* 初始化客戶端資源

* 1.獲取從LoginFrame傳遞過來的參數(shù)

* 2.初始化界面元素

* 3.初始化通信所需要的資源 EG:輸入/輸出流(DataInputStream/DataOutputStream)

* */

public ClientFrame(String name,Socket socket)

{

this.setSize(310,660);

this.setLocation(290,50);

this.setTitle("聊天室客戶端"+name+"");/* -- 指定窗口的標題 --*/

this.s = socket;/* -- 接收從LoginFrame中傳遞過來的Socket --*/

this.nic = name+" 說: ";

welcome = new JTextField(" "+name+" 歡迎您來到聊天室 ",100);

welcome.setBackground(Color.blue);

welcome.setEnabled(false);

copyright = new JTextField(" ----- all copyright @ TOP-king -----");

copyright.setEnabled(false);

allmsg = new JTextArea();

allmsg.setEditable(false);

allmsg.append(" 系統(tǒng)消息: 歡迎登錄在線聊天室 \n");

js = new JScrollPane(allmsg);//為JTextArea添加滾動條

chatmsg = new JTextField("在此輸入聊天信息");

chatmsg.addActionListener(new listen());

send = new JButton("發(fā)送");

send.addActionListener(new listen());/* -- 添加事件監(jiān)聽器 --*/

try {

out = new DataOutputStream(s.getOutputStream());

in = new DataInputStream(s.getInputStream());

} catch (IOException e) {JOptionPane.showMessageDialog(null, "系統(tǒng)異常","錯誤",JOptionPane.OK_CANCEL_OPTION);}

addcomponettocontainer();

/* -- 當用戶關(guān)閉窗口時進行相關(guān)的處理 eg:Socket Data(Input/Output)Stream 的關(guān)閉--*/

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent we)

{

sendmsg("quitlogout");/* -- 向服務(wù)器端發(fā)送關(guān)閉信息 --*/

isConnected = false;

destory();/* -- 銷毀窗口資源 --*/

}

});

new Thread(new linread()).start();/* -- 啟動讀取信息線程 --*/

}

public void addcomponettocontainer()

{

Container c = this.getContentPane();

c.setLayout(null);

welcome.setBounds(75,10,150,20);

js.setBounds(10,50,280,500);

chatmsg.setBounds(10,560,180,30);

send.setBounds(220,560,70,30);

copyright.setBounds(10,600,280,20);

c.add(welcome);

c.add(js);

c.add(chatmsg);

c.add(send);

c.add(copyright);

this.setVisible(true);

this.setResizable(false);

}

class listen implements ActionListener

{

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==send||e.getSource()==chatmsg)

{

String msg = chatmsg.getText().trim();

if("".equals(msg))

{

JOptionPane.showMessageDialog(null,"發(fā)送信息不能為空!","錯誤",JOptionPane.OK_OPTION);

}

else

{sendmsg((new Date()).toLocaleString()+"\n"+nic+msg+"\n");chatmsg.setText("");}

}

}

}

/* -- 向服務(wù)器端發(fā)送信息 --*/

public void sendmsg(String m)

{

if(isConnected)//如果socket的輸出流沒關(guān)閉

{

try {

out.writeUTF(m);

} catch (IOException e) {

JOptionPane.showMessageDialog(null,"發(fā)送信息失敗!(系統(tǒng)異常)","錯誤",JOptionPane.OK_OPTION);

}

}

else

{

JOptionPane.showMessageDialog(null,"發(fā)送信息失敗!(服務(wù)器關(guān)閉/網(wǎng)絡(luò)故障)","錯誤",JOptionPane.OK_OPTION);

}

}

/* -- 讀取信息線程 --*/

class linread implements Runnable

{

public void run()

{

read();

}

public void read()

{

while(isConnected)

{

try {

String msg = in.readUTF();

if("SYSTEM_CLOSED".equals(msg))

{

JOptionPane.showMessageDialog(null,"讀取消息失敗(服務(wù)器關(guān)閉/網(wǎng)絡(luò)故障)!","錯誤",JOptionPane.OK_OPTION);

isConnected = false;

}

else

allmsg.append(msg+"\n");

} catch (IOException e) {

}

}//end while

JOptionPane.showMessageDialog(null,"讀取消息失敗(服務(wù)器關(guān)閉/網(wǎng)絡(luò)故障)!","錯誤",JOptionPane.OK_OPTION);

}//end read()

}

public void destory()

{

try {

this.out.close();

this.in.close();

this.s.close();

} catch (IOException e) {

}

this.dispose();

}

}

======================================================

package client;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

public class LoginFrame extends JFrame{

private JTextField name;

private JTextField ip;

private JButton ok,cancle;

public Socket socket;

public LoginFrame()

{

super("登錄框");

this.setSize(400,80);

this.setLocation(100,100);

name = new JTextField("昵稱");

ip = new JTextField("127.0.0.1");

ok = new JButton("登錄");

cancle = new JButton("取消");

ok.addActionListener(new listenEvent());

cancle.addActionListener(new listenEvent());

//建立容器

addcomponettocontainer();

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

/**

* 建立容器及控件

*/

public void addcomponettocontainer()

{

Container c = this.getContentPane();

c.setLayout(null);

name.setBounds(10,10,100,30);

ip.setBounds(120,10,100,30);

ok.setBounds(230,10,70,30);

cancle.setBounds(310,10,70,30);

c.add(name);

c.add(ip);

c.add(ok);

c.add(cancle);

this.setVisible(true);

this.setResizable(false);

}

public class listenEvent implements ActionListener

{

public void actionPerformed(ActionEvent event) {

// TODO Auto-generated method stub

if(event.getSource()==ok)

{

String n = name.getText().trim();

String i = ip.getText().trim();

if("".equals(n)||"".equals(i))

{

JOptionPane.showMessageDialog(null,"昵稱、IP不能夠為空!","錯誤",JOptionPane.OK_OPTION);

}

else{login(n,i);}

}

if(event.getSource()==cancle)

{

name.setText("");

ip.setText("");

}

}

}

/**

* 進行登錄

* @param name

* @param ip

*/

public void login(String name,String ip)

{

try {

socket = new Socket(ip,7777);

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

out.writeUTF(name);

out.flush();//強制輸出緩存中的內(nèi)容

//out.close();

new ClientFrame(name,socket);

destroywindow();

} catch (UnknownHostException e) {

JOptionPane.showMessageDialog(null,"找不到主機地址(IP錯誤/網(wǎng)絡(luò)故障)!","錯誤",JOptionPane.OK_OPTION);

} catch (IOException e) {

}

}

public void destroywindow()

{

this.dispose();

}

public static void main(String[] args)

{

new LoginFrame();

}

}

==================================================

package server;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class ServerFrame extends JFrame{

/**

*

*/

private static final long serialVersionUID = 1L;

private JTextArea allmsg;

private JTextField currnum,totalnum,copyright,chatmsg;

private JButton send;

private JScrollPane js;

int num1,num2,port;/* -- num1:當前在線人數(shù) num2:總上線人數(shù) port:服務(wù)端口號 --*/

private ServerSocket ss;

ArrayListuser lists;//存放所有在線用戶

public ServerFrame()

{

super("聊天室服務(wù)器端");

this.setSize(310,660);

this.setLocation(200,50);

lists = new ArrayListuser();

num1 = num2 =0;

port = 7777;

currnum = new JTextField(" 當前在線人數(shù): "+num1);

currnum.setEnabled(false);

totalnum = new JTextField(" 上線總?cè)藬?shù): "+num2);

totalnum.setEnabled(false);

copyright = new JTextField(" ----- all copyright @ TOP-king -----");

copyright.setEnabled(false);

allmsg = new JTextArea();

allmsg.append(" --------------- 系統(tǒng)消息 --------------\n");

allmsg.setEditable(false);

allmsg.setLineWrap(true); //允許自動換行

js = new JScrollPane(allmsg);//為JTextArea添加滾動條

chatmsg = new JTextField("在此輸入系統(tǒng)信息");

chatmsg.addActionListener(new ActionListener(){

@SuppressWarnings("deprecation")

public void actionPerformed(ActionEvent arg0) {

String str = chatmsg.getText().trim();

if(!"".equals(str))

{sendmsg((new Date()).toLocaleString()+" -- 系統(tǒng)消息: "+str);chatmsg.setText("");}

else

JOptionPane.showMessageDialog(null, "消息不能為空","錯誤",JOptionPane.OK_OPTION);

chatmsg.setText("");/* -- 發(fā)送信息后,將輸入欄中的信息清空 -- */

}

});

send = new JButton("發(fā)送");

send.addActionListener(new ActionListener(){

@SuppressWarnings("deprecation")

public void actionPerformed(ActionEvent arg0) {

String str = chatmsg.getText().trim();

if(!"".equals(str))

{sendmsg((new Date()).toLocaleString()+" -- 系統(tǒng)消息: "+str);chatmsg.setText("");}

else

JOptionPane.showMessageDialog(null, "消息不能為空","錯誤",JOptionPane.OK_OPTION);

chatmsg.setText("");/* -- 發(fā)送信息后,將輸入欄中的信息清空 -- */

}

});

//建立容器

addcomponettocontainer();

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent we)

{

sendmsg("SYSTEM_CLOSED");/* -- 向客戶端發(fā)送服務(wù)器關(guān)閉信息 -- */

destory();

}

});

start(); /* -- 啟動連接服務(wù) -- */

}

public void addcomponettocontainer()

{

//Container建立容器

Container c = this.getContentPane();

c.setLayout(null);

currnum.setBounds(20,15,130,20);

totalnum.setBounds(155,15,125,20);

js.setBounds(10,50,280,500);

chatmsg.setBounds(10,560,180,30);

send.setBounds(220,560,70,30);

copyright.setBounds(10,600,280,20);

c.add(currnum);

c.add(totalnum);

c.add(js);

c.add(chatmsg);

c.add(send);

c.add(copyright);

this.setVisible(true);

this.setResizable(false);

}

/**

* start()方法監(jiān)聽客戶的連接

* 并且保存客戶端的相關(guān)信息EG:用戶昵稱、用戶所使用的Socket

* 用戶連接到服務(wù)器成功之后,將其保存到用戶列表中,并為該用戶啟動一個線程用于通信 */

@SuppressWarnings("deprecation")

public void start()

{

boolean isStarted = false;/* -- 用于標記服務(wù)器是否已經(jīng)正常啟動 -- */

try {

this.ss = new ServerSocket(port);

isStarted = true;

this.allmsg.append((new Date()).toLocaleString()+" 服務(wù)器啟動 @ 端口: "+port+"\n");

while(isStarted)

{

Socket client = this.ss.accept(); /* -- 監(jiān)聽客戶端的連接 -- */

DataInputStream in = new DataInputStream(client.getInputStream());

String name = in.readUTF();

user u = new user();

u.name = name;

u.socket = client;

lists.add(u); //將該用戶加到列表中去

num1++;

num2++;

currnum.setText(" 當前在線人數(shù): "+num1);

totalnum.setText(" 上線總?cè)藬?shù): "+num2);

this.allmsg.append((new Date()).toLocaleString()+" : "+u.name+" 登錄 \n");

new Thread(new ClientThread(u)).start();/* -- 為該用戶啟動一個通信線程 -- */

}

} catch (IOException e) {

System.out.println("服務(wù)器已經(jīng)啟動......");

System.exit(0);

}

}

/**

* 通信線程主要功能包括:

* 1.監(jiān)聽客戶端輸入的信息

* 2.將接收到的信息轉(zhuǎn)發(fā)給其他用戶 */

class ClientThread implements Runnable

{

user user = null;

boolean isConnected = true;

DataInputStream dis = null;

DataOutputStream dos = null;

public ClientThread(user u)

{

this.user = u;

try {

this.dis = new DataInputStream(this.user.socket.getInputStream());

this.dos = new DataOutputStream(this.user.socket.getOutputStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void run()

{

readmsg();

}

/* -- 讀取客戶的聊天信息 -- */

@SuppressWarnings("deprecation")

public void readmsg()

{

while(isConnected)

{

try {

String msg = dis.readUTF();

if("quitlogout".equals(msg))//當用戶關(guān)閉客戶端窗口時,發(fā)送quit字符串 表示用戶已經(jīng)退出

{

num1--;

try{

this.dis.close();

this.dos.close();

this.user.socket.close();

this.isConnected = false;

}catch(IOException ioe)

{

ioe.printStackTrace();

}finally{

this.isConnected = false;

if(dis!=null) this.dis.close();

if(dos!=null) this.dos.close();

if(this.user.socket!=null) this.user.socket.close();

}

lists.remove(this.user);//從列表中刪除該用戶

currnum.setText(" 當前在線人數(shù): "+num1);

allmsg.append((new Date()).toLocaleString()+" : "+this.user.name+" 退出\n");

}

else

sendmsg(msg);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/* -- 將信息進行轉(zhuǎn)發(fā) -- */

public void sendmsg(String msg)

{

user us = new user();

DataOutputStream os = null;

if(lists.size()0)

{

for(int i=0;ilists.size();i++)

{

us = lists.get(i);

try {

os = new DataOutputStream(us.socket.getOutputStream());

os.writeUTF(msg);

} catch (IOException e) {

e.printStackTrace();

}

}

}

else

JOptionPane.showMessageDialog(null, "當前無用戶在線。發(fā)送消息失敗","失敗",JOptionPane.OK_OPTION);

}

public void destory()

{

try {

this.ss.close();

} catch (IOException e) {

e.printStackTrace();

}

this.dispose();

}

public static void main(String[] args)

{

new ServerFrame();

}

}

=================================================

package server;

import java.net.*;

public class user {

String name;

Socket socket;

}

急求一個關(guān)于UDP的JAVA實現(xiàn)多人聊天源代碼

import java.io.InputStream;

import java.io.DataInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.DataOutputStream;

import java.io.BufferedReader;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.IOException;

import java.util.Date;

class Server

{

public Server()

{

try

{

ServerSocket s=new ServerSocket(8888);

Socket ss=s.accept();

OutputStream out=ss.getOutputStream();

DataOutputStream dout=new DataOutputStream(out);

InputStream in=ss.getInputStream();

DataInputStream din=new DataInputStream(in);

System.out.print(din.readUTF()+"!");

dout.writeUTF("你已經(jīng)連接到服務(wù)器"+"\t"+"你的地址:"+ss.getInetAddress()+"\t"

+"你的鏈接端口:"+ss.getLocalPort()+"\n");

new ReadMessage(din).start();

new SendMessage(dout).start();

}

catch (IOException e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

new Server();

}

}

//接受客戶端信息

class ReadMessage extends Thread

{

private DataInputStream din;

public ReadMessage(DataInputStream din)

{

this.din=din;

}

public void run()

{

String str;

try

{

while (true)

{

str=din.readUTF();

System.out.println(new Date().toLocaleString()+"客戶端說:"+str);

if (str.equals("bye"))

{

System.out.println("客戶端下線!");

break;

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

// 發(fā)出服務(wù)器信息

class SendMessage extends Thread

{

private DataOutputStream dout;

public SendMessage(DataOutputStream dout)

{

this.dout=dout;

}

public void run()

{

InputStreamReader inr=new InputStreamReader(System.in);

BufferedReader buf=new BufferedReader(inr);

String str;

try

{

while(true)

{

str=buf.readLine();

dout.writeUTF(str);

if (str.equals("bye"))

{

System.out.println("服務(wù)器退出!");

System.exit(1);

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

import java.io.InputStream;

import java.io.DataInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.DataOutputStream;

import java.io.BufferedReader;

import java.net.Socket;

import java.io.IOException;

import java.util.Date;

class Client

{

public Client()

{

try

{

Socket s=new Socket("192.168.1.2",8888);

InputStream in=s.getInputStream();

DataInputStream din=new DataInputStream(in);

OutputStream out=s.getOutputStream();

DataOutputStream dout=new DataOutputStream(out);

dout.writeUTF("服務(wù)器你好!我是客戶端");

System.out.println(din.readUTF());

new Thread(new SenderMessage(dout)).start();

new Thread(new ReaderMessage(din)).start();

}

catch (IOException e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

new Client();

}

}

class ReaderMessage implements Runnable

{

private DataInputStream din;

public ReaderMessage(DataInputStream din)

{

this.din=din;

}

public void run()

{

String str;

try

{

while(true)

{

str=din.readUTF();

System.out.println(new Date().toLocaleString()+"服務(wù)器說:"+str);

if (str.equals("bye"))

{

System.out.println("服務(wù)器已經(jīng)關(guān)閉,此程序自動退出!");

break;

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

class SenderMessage implements Runnable

{

private DataOutputStream dout;

public SenderMessage(DataOutputStream dout)

{

this.dout=dout;

}

public void run()

{

String str;

InputStreamReader inf=new InputStreamReader(System.in);

BufferedReader buf=new BufferedReader(inf);

try

{

while (true)

{

str=buf.readLine();

dout.writeUTF(str);

if (str.equals("bye"))

{

System.out.println("客戶端自己退出!");

System.exit(1);

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

java 聊天室 源代碼

【ClientSocketDemo.java 客戶端Java源代碼】

import java.net.*;

import java.io.*;

public class ClientSocketDemo

{

//聲明客戶端Socket對象socket

Socket socket = null;

//聲明客戶器端數(shù)據(jù)輸入輸出流

DataInputStream in;

DataOutputStream out;

//聲明字符串數(shù)組對象response,用于存儲從服務(wù)器接收到的信息

String response[];

//執(zhí)行過程中,沒有參數(shù)時的構(gòu)造方法,本地服務(wù)器在本地,取默認端口10745

public ClientSocketDemo()

{

try

{

//創(chuàng)建客戶端socket,服務(wù)器地址取本地,端口號為10745

socket = new Socket("localhost",10745);

//創(chuàng)建客戶端數(shù)據(jù)輸入輸出流,用于對服務(wù)器端發(fā)送或接收數(shù)據(jù)

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

//獲取客戶端地址及端口號

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

//向服務(wù)器發(fā)送數(shù)據(jù)

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

//從服務(wù)器接收數(shù)據(jù)

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

//執(zhí)行過程中,有一個參數(shù)時的構(gòu)造方法,參數(shù)指定服務(wù)器地址,取默認端口10745

public ClientSocketDemo(String hostname)

{

try

{

//創(chuàng)建客戶端socket,hostname參數(shù)指定服務(wù)器地址,端口號為10745

socket = new Socket(hostname,10745);

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

//執(zhí)行過程中,有兩個個參數(shù)時的構(gòu)造方法,第一個參數(shù)hostname指定服務(wù)器地址

//第一個參數(shù)serverPort指定服務(wù)器端口號

public ClientSocketDemo(String hostname,String serverPort)

{

try

{

socket = new Socket(hostname,Integer.parseInt(serverPort));

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

public static void main(String[] args)

{

String comd[] = args;

if(comd.length == 0)

{

System.out.println("Use localhost(127.0.0.1) and default port");

ClientSocketDemo demo = new ClientSocketDemo();

}

else if(comd.length == 1)

{

System.out.println("Use default port");

ClientSocketDemo demo = new ClientSocketDemo(args[0]);

}

else if(comd.length == 2)

{

System.out.println("Hostname and port are named by user");

ClientSocketDemo demo = new ClientSocketDemo(args[0],args[1]);

}

else System.out.println("ERROR");

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

【ServerSocketDemo.java 服務(wù)器端Java源代碼】

import java.net.*;

import java.io.*;

public class ServerSocketDemo

{

//聲明ServerSocket類對象

ServerSocket serverSocket;

//聲明并初始化服務(wù)器端監(jiān)聽端口號常量

public static final int PORT = 10745;

//聲明服務(wù)器端數(shù)據(jù)輸入輸出流

DataInputStream in;

DataOutputStream out;

//聲明InetAddress類對象ip,用于獲取服務(wù)器地址及端口號等信息

InetAddress ip = null;

//聲明字符串數(shù)組對象request,用于存儲從客戶端發(fā)送來的信息

String request[];

public ServerSocketDemo()

{

request = new String[3]; //初始化字符串數(shù)組

try

{

//獲取本地服務(wù)器地址信息

ip = InetAddress.getLocalHost();

//以PORT為服務(wù)端口號,創(chuàng)建serverSocket對象以監(jiān)聽該端口上的連接

serverSocket = new ServerSocket(PORT);

//創(chuàng)建Socket類的對象socket,用于保存連接到服務(wù)器的客戶端socket對象

Socket socket = serverSocket.accept();

System.out.println("This is server:"+String.valueOf(ip)+PORT);

//創(chuàng)建服務(wù)器端數(shù)據(jù)輸入輸出流,用于對客戶端接收或發(fā)送數(shù)據(jù)

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

//接收客戶端發(fā)送來的數(shù)據(jù)信息,并顯示

request[0] = in.readUTF();

request[1] = in.readUTF();

request[2] = in.readUTF();

System.out.println("Received messages form client is:");

System.out.println(request[0]);

System.out.println(request[1]);

System.out.println(request[2]);

//向客戶端發(fā)送數(shù)據(jù)

out.writeUTF("Hello client!");

out.writeUTF("Your ip is:"+request[1]);

out.writeUTF("Your port is:"+request[2]);

}

catch(IOException e){e.printStackTrace();}

}

public static void main(String[] args)

{

ServerSocketDemo demo = new ServerSocketDemo();

}

}

JAVA聊天室 客戶端 和 服務(wù)器 完整代碼

CS模式的QQ這是服務(wù)器:ChatServer.javaimport java.net.*;

import java.io.*;

public class ChatServer

{

final static int thePort=8189;

ServerSocket theServer;

ChatHandler[] chatters;

int numbers=0;

public static void main(String args[])

{

ChatServer app=new ChatServer();

app.run();

}

public ChatServer()

{

try

{

theServer=new ServerSocket(thePort);

chatters=new ChatHandler[10];

}

catch(IOException io){}

}

public void run()

{

try

{

System.out.println("服務(wù)器已經(jīng)建立!");

while(numbers10)

{

Socket theSocket=theServer.accept();

ChatHandler chatHandler=new ChatHandler(theSocket,this);

chatters[numbers]=chatHandler;

numbers++;

}

}catch(IOException io){}

}

public synchronized void removeConnectionList(ChatHandler c)

{

int index=0;

for(int i=0;i=numbers-1;i++)

if(chatters[i]==c)index=i;

for(int i=index;inumbers-1;i++)

chatters[i]=chatters[i+1];

chatters[numbers-1]=null;

numbers--;

}

public synchronized String returnUsernameList()

{

String line="";

for(int i=0;i=numbers-1;i++)

line=line+chatters[i].user+":";

return line;

}

public void broadcastMessage(String line)

{

System.out.println("發(fā)布信息:"+line);

for(int i=0;i=numbers-1;i++)

chatters[i].sendMessage(line);

}

}====================================================這是客戶端:ChatClient.javaimport java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class ChatClient extends Thread implements ActionListener

{

JTextField messageField,IDField,ipField,portField;

JTextArea message,users;

JButton connect,disconnect;

String user="";

String userList[]=new String[10];

Socket theSocket;

BufferedReader in;

PrintWriter out;

boolean connected=false;

Thread thread;

public static void main(String args[])

{

JFrame frame=new JFrame("聊天室");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ChatClient cc=new ChatClient();

JPanel content=cc.createComponents();

frame.getContentPane().add(content);

frame.setSize(550,310);

frame.setVisible(true);

}

public JPanel createComponents()

{

JPanel pane=new JPanel(new BorderLayout());

message=new JTextArea(10,35);

message.setEditable(false);

JPanel paneMsg=new JPanel();

paneMsg.setBorder(BorderFactory.createTitledBorder("聊天內(nèi)容"));

paneMsg.add(message);

users=new JTextArea(10,10);

JPanel listPanel=new JPanel();

listPanel.setBorder(BorderFactory.createTitledBorder("在線用戶:"));

listPanel.add(users);

messageField=new JTextField(50);

IDField=new JTextField(5);

ipField=new JTextField("LocalHost");

portField=new JTextField("8189");

connect=new JButton("連 接");

disconnect=new JButton("斷 開");

disconnect.setEnabled(false);

JPanel buttonPanel=new JPanel();

buttonPanel.add(new Label("服務(wù)器IP:"));

buttonPanel.add(ipField);

buttonPanel.add(new Label("端口:"));buttonPanel.add(portField);

buttonPanel.add(new Label("用戶名:"));

buttonPanel.add(IDField);

buttonPanel.add(connect);

buttonPanel.add(disconnect);

pane.add(messageField,"South");

pane.add(buttonPanel,"North");

pane.add(paneMsg,"Center");

pane.add(listPanel,"West");

connect.addActionListener(this);

disconnect.addActionListener(this);

messageField.addActionListener(this);

IDField.addActionListener(this);

ipField.addActionListener(this);

return pane;

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==connect){

user=IDField.getText();

String ip=ipField.getText();

int port =Integer.parseInt(portField.getText());

if(!user.equals("")connectToServer(ip,port,user))

{

disconnect.setEnabled(true);

connect.setEnabled(false);

}

}

if(e.getSource()==disconnect)disconnectFromServer();

if(e.getSource()==messageField)

if(theSocket!=null)

{

out.println("MESSAGE:"+messageField.getText());

messageField.setText("");

}

}

public void disconnectFromServer()

{

if(theSocket!=null)

{

try

{

connected=false;

out.println("LEAVE:"+user);

disconnect.setEnabled(false);

connect.setEnabled(true);

thread=null;

theSocket.close();

}catch(IOException io){}

theSocket=null;

message.setText("");

users.setText("");

}

}

public boolean connectToServer(String ip,int port,String ID)

{

if(theSocket!=null)

return false;

try

{

theSocket=new Socket(ip,port);

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

out=new PrintWriter(new OutputStreamWriter(theSocket.getOutputStream()),true);

out.println("USER:"+user);

message.setText("");

connected=true;

thread=new Thread(this);

thread.start();

}catch(Exception e){return false;}

return true;

}

public void extractMessage(String line)

{

System.out.println(line);

Message messageline;

messageline=new Message(line);

if(messageline.isValid())

{

if(messageline.getType().equals("JOIN"))

{

user=messageline.getBody();

message.append(user+"進入了聊天室\n");

}

else if(messageline.getType().equals("LIST"))

updateList(messageline.getBody());

else if(messageline.getType().equals("MESSAGE"))

message.append(messageline.getBody()+"\n");

else if(messageline.getType().equals("REMOVE"))

message.append(messageline.getBody()+"離開了聊天室\n");

}

else

message.append("出現(xiàn)問題:"+line+"\n");

}

public void updateList(String line)

{

users.setText("");

String str=line;

for(int i=0;i10;i++)

userList[i]="";

int index=str.indexOf(":");

int a=0;

while(index!=-1){

userList[a]=str.substring(0,index);

str=str.substring(index+1);

a++;

index=str.indexOf(":");

}

for(int i=0;i10;i++)

users.append(userList[i]+"\n");

}

public void run(){

try{

String line="";

while(connected line!=null){

line=in.readLine();

if(line!=null) extractMessage(line);

}

}catch(IOException e){}

}

} =======================================================import java.net.*;

import java.io.*;

class ChatHandler extends Thread{

Socket theSocket;

BufferedReader in;

PrintWriter out;

int thePort;

ChatServer parent;

String user="";

boolean disconnect=false;

public ChatHandler(Socket socket,ChatServer parent){

try{

theSocket=socket;

this.parent=parent;

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

out=new PrintWriter(new OutputStreamWriter(theSocket.getOutputStream()),true);

thePort=theSocket.getPort();

start();

}catch(IOException io){}

}

public void sendMessage(String line){

out.println(line);

}

public void setupUserName(String setname){

user=setname;

//System.out.print(user+"參加");

parent.broadcastMessage("JOIN:"+user);

}

public void extractMessage(String line){

Message messageline;

messageline = new Message(line);

if(messageline.isValid()){

if(messageline.getType().equals("USER")){

setupUserName(messageline.getBody());

parent.broadcastMessage("LIST:"+parent.returnUsernameList());

}

else if(messageline.getType().equals("MESSAGE")){

parent.broadcastMessage("MESSAGE:"+user+"說: "+messageline.getBody());

}

else if(messageline.getType().equals("LEAVE")){

String c=disconnectClient();

parent.broadcastMessage("REMOVE:"+c);

parent.broadcastMessage("LIST:"+parent.returnUsernameList());

}

}

else

sendMessage("命令不存在!");

}

public String disconnectClient(){

try{

in.close();

out.close();

theSocket.close();

parent.removeConnectionList(this);

disconnect=true;

}catch(Exception ex){}

return user;

}

public void run(){

String line,name;

boolean valid=false;

try{

while((line=in.readLine())!=null){

System.out.println("收到:"+line);

extractMessage(line);

}

}catch(IOException io){}

}

}

=========================================================

Message.javapublic class Message{

private String type;

private String body;

private boolean valid;

public Message(String messageLine){

valid=false;

type=body=null;

int pos=messageLine.indexOf(":");

if(pos=0){

type=messageLine.substring(0,pos).toUpperCase();

body=messageLine.substring(pos+1);

valid=true;

}

}

public Message(String type,String body){

valid=true;

this.type=type;

this.body=body;

}

public String getType(){

return type;

}

public String getBody(){

return body;

}

public boolean isValid(){

return valid;

}

} ==================================================共有4個文件,先運行服務(wù)段端。。。 這是我以前學的時候?qū)戇^的!希望能幫的上你

分享文章:java聊天代碼 java在線聊天
當前鏈接:http://muchs.cn/article0/docceio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、關(guān)鍵詞優(yōu)化網(wǎng)站收錄、建站公司、網(wǎng)站改版品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司