您的位置:首页 > 理论基础 > 计算机网络

java编程_socket_套接字_网络编程_简易的GUI多线程聊天程序

2012-04-29 03:01 926 查看
运行效果:



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

服务器端代码:

package com.b510.socket1706.gui.freeechatroom;

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

/**
* 服务器端程序
*
* @author Hongten
*
* @time 2012-4-29 2012
*/
public class TestServer {
private ServerSocket ss;
private Socket s;
private DataInputStream dis;
private DataOutputStream dos;
private TextArea ta;
private TextField tf;

public static void main(String args[]) {
TestServer ts = new TestServer();
ts.createUI();
ts.connect();
ts.createThread();
}

public void connect() {
try {
ss = new ServerSocket(8888);
s = ss.accept();
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
// 13701303436

}
}

public void createUI() {
Frame f = new Frame("Server");
ta = new TextArea();
tf = new TextField();
Button send = new Button("send");
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(tf, "Center");
p.add(send, "East");
f.add(ta, "Center");
f.add(p, "South");
MyServerListener listener = new MyServerListener(this);
send.addActionListener(listener);
tf.addActionListener(listener);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(400, 400);
f.setVisible(true);
}

public void createThread() {
MyServerReader reader = new MyServerReader(this);
reader.start();
}

public void close() {
try {
dis.close();
dos.close();
s.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public DataInputStream getDataInputStream() {
return dis;
}

public DataOutputStream getDataOutputStream() {
return dos;
}

public TextArea getTextArea() {
return ta;
}

public TextField getTextField() {
return tf;
}
}

class MyServerListener implements ActionListener {
private TestServer server;

public MyServerListener(TestServer server) {
this.server = server;
}

public void actionPerformed(ActionEvent e) {
TextField tf = server.getTextField();
String info = tf.getText();
server.getTextArea().append("自己说: " + info + "\n");
try {
server.getDataOutputStream().writeUTF(info);
} catch (IOException e1) {
e1.printStackTrace();
}
if (info.equals("bye")) {
server.close();
System.exit(0);
}
tf.setText("");
tf.requestFocus();
}
}

class MyServerReader extends Thread {
private TestServer server;

public MyServerReader(TestServer server) {
this.server = server;
}

public void run() {
String info;
DataInputStream dis = server.getDataInputStream();
TextArea ta = server.getTextArea();
try {
while (true) {
info = dis.readUTF();
ta.append("对方说: " + info + "\n");
if (info.equals("bye")) {
server.close();
System.exit(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}


客户端代码:

package com.b510.socket1706.gui.freeechatroom;

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
/**
* 客户端程序
* @author Hongten
*
* @time 2012-4-29  2012
*/
public class TestClient {
private Socket s;
private DataInputStream dis;
private DataOutputStream dos;
private TextArea ta;
private TextField tf;

public static void main(String args[]) {
TestClient tc = new TestClient();
tc.createUI();
tc.connect();
tc.createThread();
}

public void connect() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

public void createUI() {
Frame f = new Frame("Client");
ta = new TextArea();
tf = new TextField();
Button send = new Button("send");
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(tf, "Center");
p.add(send, "East");
f.add(ta, "Center");
f.add(p, "South");
MyClientListener listener = new MyClientListener(this);
send.addActionListener(listener);
tf.addActionListener(listener);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(400, 400);
f.setLocation(600, 0);
f.setVisible(true);
}

public void createThread() {
MyClientReader reader = new MyClientReader(this);
reader.start();
}

public void close() {
try {
dis.close();
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public DataInputStream getDataInputStream() {
return dis;
}

public DataOutputStream getDataOutputStream() {
return dos;
}

public TextArea getTextArea() {
return ta;
}

public TextField getTextField() {
return tf;
}
}

class MyClientListener implements ActionListener {

private TestClient client;

public MyClientListener(TestClient client) {
this.client = client;
}

public void actionPerformed(ActionEvent e) {
TextField tf = client.getTextField();
String info = tf.getText();
client.getTextArea().append("自己说: " + info + "\n");
try {
client.getDataOutputStream().writeUTF(info);
} catch (IOException e1) {
e1.printStackTrace();
}
if (info.equals("bye")) {
client.close();
System.exit(0);
}
tf.setText("");
tf.requestFocus();
}
}

class MyClientReader extends Thread {
private TestClient client;

public MyClientReader(TestClient client) {
this.client = client;
}

public void run() {
String info;
DataInputStream dis = client.getDataInputStream();
TextArea ta = client.getTextArea();
try {
while (true) {
info = dis.readUTF();
ta.append("对方说: " + info + "\n");
if (info.equals("bye")) {
client.close();
System.exit(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}


有关于socket的简单编程基础,大家可以参考:

/article/4667579.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: