您的位置:首页 > 编程语言 > Java开发

JFrame的java简单聊天软件

2013-08-15 09:37 197 查看
自己写了个简单的简陋的聊天applet小程序。

package com.socket.server;

import java.awt.Container;
import java.awt.GridLayout;
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.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
* java简单聊天软件applet
* @author sfit0086
*
*/
public class SampServer2 {
static JFrame frame = null;//窗体
static JTextArea areaFiftyOne = null;//显示聊天内容框
static JTextArea areaFiftyTwo = null;//输入内容框

private static Socket socket = null;
private static OutputStream os = null;

public static void main(String args[]) {
frame = new JFrame("聊天1");
areaFiftyOne = new JTextArea();
areaFiftyTwo = new JTextArea();
SampServer2 innerClass=new SampServer2();
//创建一个线程运行服务端,(服务端处于阻塞状态)
SampServer2.TestThread a=innerClass.new TestThread();
Thread thread = new Thread(a);
thread.start();
createJFrame();
}

/**
* 发送聊天内容去服务端
* @param data
* @return
*/
public static boolean clientSocket(String data) {

//服务器端IP地址
String serverIP = "10.0.7.85";//发送目的地的IP
//服务器端端口号
int port = 10000;//发送目的地的端口
//发送内容
try {
//建立连接
if(socket == null || socket.isClosed()) {
socket = new Socket(serverIP,port);
}
//初始化流
os = socket.getOutputStream();
os.write(data.getBytes());
} catch (Exception e) {
e.printStackTrace(); //打印异常信息
return false;
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return true;
}

/**
* 关闭窗口
* @return
*/
public static boolean closeFrame() {
try {
//建立连接
try {
//关闭流和连接
if(socket != null && !socket.isClosed()) {
socket.close();
}
System.exit(0);
} catch (Exception e2) {}
} catch (Exception e) {
e.printStackTrace(); //打印异常信息
return false;
}

return true;
}
/**
* 创建聊天对话框绑定事件
*/
public static void createJFrame() {
//areaFiftyTwo.setDocument(areaFiftyOne.getDocument());
JPanel p = new JPanel();
JButton jb = new JButton("提交");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = areaFiftyTwo.getText();
if(s.getBytes().length>50) {
areaFiftyOne.append("一次最多只能输入50个字符\n");
areaFiftyOne.paintImmediately(areaFiftyOne.getBounds());
areaFiftyOne.setLineWrap(true);
} else {
areaFiftyOne.append("自己say: " + s + "\n");
areaFiftyOne.paintImmediately(areaFiftyOne.getBounds());
areaFiftyOne.setLineWrap(true);
areaFiftyTwo.setText(null);
clientSocket(s);
}
}
});
JButton jb3 = new JButton("关闭窗口");
jb3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
closeFrame();
}
});
p.add(jb);
p.add(jb3);
Container content = frame.getContentPane();
content.setLayout(new GridLayout(3,1));
content.add(new JScrollPane(areaFiftyOne));
content.add(new JScrollPane(areaFiftyTwo));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.add(p, "Center");
frame.setVisible(true);
}

/**
* server服务端 接收对方发来的消息
* @author sfit0086
*
*/
class TestThread implements Runnable {

@Override
public void run() {
Socket socket2 = null;
InputStream is2 = null;
try {
ServerSocket serverSocket = new ServerSocket(10001);
while (true) {
// 获得连接
socket2 = serverSocket.accept();
is2 = socket2.getInputStream();
BufferedReader reader =
new BufferedReader(new InputStreamReader(is2));
// 向客户端发送反馈内容
String say = reader.readLine();
areaFiftyOne.append("对方say: "+say+"\n");
areaFiftyOne.paintImmediately(areaFiftyOne.getBounds());
areaFiftyOne.setLineWrap(true);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is2.close();
socket2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
}

可以启两个applet只需要把端口和IP设置好,就可以聊天了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  applet 聊天 jframe