我做的小小聊天器,java swing实现
2011-07-19 08:08
666 查看
这个是我看教程做的,不足之处,多多指教
首先启动服务端,然后启动客户端,客户端可启动多个
服务端(server):
代码;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class Server extends JFrame{
JTextArea ja = new JTextArea();
JTextField jf = new JTextField("服务器启动");
ServerSocket ss = null;
boolean bool = false;
ArrayList<Client> clients = new ArrayList<Client>(); //用到泛型的知识
public static void main(String[] args) {
new Server().connect();
}
Server(){ //服务器端界面
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(d.width/2,0,d.width/4,d.height);
setLayout(new BorderLayout());
ja.setBackground(Color.yellow);
jf.setBackground(Color.orange);
setVisible(true);
add(jf,BorderLayout.NORTH);
add(ja,BorderLayout.CENTER);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void connect(){
try {
ss = new ServerSocket(8880);
bool = true;
while(bool){
Socket s = ss.accept(); //阻塞式连接
Client c = new Client(s); //连接一个创建一个客户
new Thread(c).start(); //线程启动
clients.add(c);
jf.setText("有" + clients.size() + "个用户上线了");
}
} catch (IOException e) {
e.printStackTrace();
}
}
class Client implements Runnable{
Socket soc = null;
boolean bl = false;
DataInputStream dis = null;
DataOutputStream dos = null;
Client(Socket s){
soc = s;
bl = true;
}
public void send(String str){
try {
dos = new DataOutputStream(soc.getOutputStream());
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run(){
try{
while(bl){
dis = new DataInputStream(soc.getInputStream());
String str = new String(dis.readUTF()); //接收客户端信息
ja.setText(ja.getText() + str + "\n");
for(int i = 0;i < clients.size();i ++){
Client c = clients.get(i); //发送信息给所有客户端
c.send(str);
}
}
}catch (IOException e) {
System.out.println("connet closed");
}finally{
try {
dis.close();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端(chatguest):
代码:
import javax.swing.*;
import java.awt.*;
import java.awt.List;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatGuest extends JFrame{
JTextArea jta = new JTextArea(15,40);
JTextField jtf = new JTextField("");
JComboBox box = new JComboBox();
String [] string = new String[3];
Socket s = null;
boolean bl = false;
DataOutputStream dos = null;
DataInputStream dis = null;
public static void main(String[] args) {
new ChatGuest().lanchFrame();
}
public void lanchFrame(){ //创建用户界面
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(d.width/2,d.height/10,400,400);
setLayout(new BorderLayout());
setVisible(true);
textArea();
add(box,BorderLayout.NORTH);
add(jta,BorderLayout.CENTER);
add(jtf,BorderLayout.SOUTH);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
connect();
new Thread(new ReceThread()).start();
}
public void textArea(){ //设置输入显示框
box.setBackground(Color.orange);
jta.setBackground(Color.yellow);
jta.setForeground(Color.red);
jtf.setBackground(Color.orange);
jtf.setForeground(Color.blue);
jtf.addKeyListener(new JtaListener());
try {
InetAddress as = InetAddress.getLocalHost();
string[0] = as.getHostAddress();
string[1] = as.getHostName();
string[2] = System.getProperty("os.name");
box.addItem("您的ip地址是"+ string[0]);
box.addItem("您的爱机是"+ string[1]);
box.addItem("您的操作系统是"+string[2]);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public void connect(){
try {
s = new Socket("Localhost",8880); //建立与服务端连接,这里ip是本机,端口:8880,可更改
bl = true;
jtf.setText("本机连接成功");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
class JtaListener extends KeyAdapter{
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEve
4000
nt.VK_ENTER)
{
try {
dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(jtf.getText()); //发送给服务端信息
} catch (IOException e1) {
e1.printStackTrace();
}
jtf.setText("");
if(jta.getLineCount() == 6) {
jta.setText("");
}
}
}
}
class ReceThread implements Runnable{ //接收服务端信息
public void run() {
try {
dis = new DataInputStream(s.getInputStream());
while(bl){
String str = dis.readUTF();
jta.setText(jta.getText() + str +"\n" );
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
dis.close();
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
首先启动服务端,然后启动客户端,客户端可启动多个
服务端(server):
代码;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class Server extends JFrame{
JTextArea ja = new JTextArea();
JTextField jf = new JTextField("服务器启动");
ServerSocket ss = null;
boolean bool = false;
ArrayList<Client> clients = new ArrayList<Client>(); //用到泛型的知识
public static void main(String[] args) {
new Server().connect();
}
Server(){ //服务器端界面
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(d.width/2,0,d.width/4,d.height);
setLayout(new BorderLayout());
ja.setBackground(Color.yellow);
jf.setBackground(Color.orange);
setVisible(true);
add(jf,BorderLayout.NORTH);
add(ja,BorderLayout.CENTER);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void connect(){
try {
ss = new ServerSocket(8880);
bool = true;
while(bool){
Socket s = ss.accept(); //阻塞式连接
Client c = new Client(s); //连接一个创建一个客户
new Thread(c).start(); //线程启动
clients.add(c);
jf.setText("有" + clients.size() + "个用户上线了");
}
} catch (IOException e) {
e.printStackTrace();
}
}
class Client implements Runnable{
Socket soc = null;
boolean bl = false;
DataInputStream dis = null;
DataOutputStream dos = null;
Client(Socket s){
soc = s;
bl = true;
}
public void send(String str){
try {
dos = new DataOutputStream(soc.getOutputStream());
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run(){
try{
while(bl){
dis = new DataInputStream(soc.getInputStream());
String str = new String(dis.readUTF()); //接收客户端信息
ja.setText(ja.getText() + str + "\n");
for(int i = 0;i < clients.size();i ++){
Client c = clients.get(i); //发送信息给所有客户端
c.send(str);
}
}
}catch (IOException e) {
System.out.println("connet closed");
}finally{
try {
dis.close();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端(chatguest):
代码:
import javax.swing.*;
import java.awt.*;
import java.awt.List;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatGuest extends JFrame{
JTextArea jta = new JTextArea(15,40);
JTextField jtf = new JTextField("");
JComboBox box = new JComboBox();
String [] string = new String[3];
Socket s = null;
boolean bl = false;
DataOutputStream dos = null;
DataInputStream dis = null;
public static void main(String[] args) {
new ChatGuest().lanchFrame();
}
public void lanchFrame(){ //创建用户界面
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(d.width/2,d.height/10,400,400);
setLayout(new BorderLayout());
setVisible(true);
textArea();
add(box,BorderLayout.NORTH);
add(jta,BorderLayout.CENTER);
add(jtf,BorderLayout.SOUTH);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
connect();
new Thread(new ReceThread()).start();
}
public void textArea(){ //设置输入显示框
box.setBackground(Color.orange);
jta.setBackground(Color.yellow);
jta.setForeground(Color.red);
jtf.setBackground(Color.orange);
jtf.setForeground(Color.blue);
jtf.addKeyListener(new JtaListener());
try {
InetAddress as = InetAddress.getLocalHost();
string[0] = as.getHostAddress();
string[1] = as.getHostName();
string[2] = System.getProperty("os.name");
box.addItem("您的ip地址是"+ string[0]);
box.addItem("您的爱机是"+ string[1]);
box.addItem("您的操作系统是"+string[2]);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public void connect(){
try {
s = new Socket("Localhost",8880); //建立与服务端连接,这里ip是本机,端口:8880,可更改
bl = true;
jtf.setText("本机连接成功");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
class JtaListener extends KeyAdapter{
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEve
4000
nt.VK_ENTER)
{
try {
dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(jtf.getText()); //发送给服务端信息
} catch (IOException e1) {
e1.printStackTrace();
}
jtf.setText("");
if(jta.getLineCount() == 6) {
jta.setText("");
}
}
}
}
class ReceThread implements Runnable{ //接收服务端信息
public void run() {
try {
dis = new DataInputStream(s.getInputStream());
while(bl){
String str = dis.readUTF();
jta.setText(jta.getText() + str +"\n" );
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
dis.close();
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
相关文章推荐
- JAVA通过Swing和socket编程实现简易点对点聊天
- java swing实现简单的socket通讯聊天程序源码
- Java Swing实现的仿QQ气泡消息聊天窗口效果
- java网络socket编程(八)之java中BIO实现聊天系统的群聊功能
- java基于swing实现的连连看代码
- java基于TCP协议实现聊天程序
- Java Swing中的文本区(JTextArea)实现换行保存到文件的几个方法
- java Swing画弧线三角形矩形渐变旋转实现实例教程演示demo付源代码
- JAVA使用swing/awt实现界面
- JAVA中Swing的应用的实现
- java实现客户端与服务端互传信息聊天(带界面)
- java获取麦实现语音聊天
- java swing实现图书管理系统之Java swing图书管理系统源码与实现
- Java swing mysql实现的学生选课系统项目源码
- 【JAVA】用swing实现的一个秒表
- java TCP实现聊天
- Java Swing实现仿QQ
- Java系列讲座二:Socket网络通信实现聊天软件项目讲解(UDP)
- java Swing实现右键复制粘贴
- java swing mysql实现的进销存系统项目源码附带视频指导教程