//客户端
packageyjd9;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.io.*;importjava.net.Socket;importjava.util.logging.Level;importjava.util.logging.Logger;import javax.swing.*;public class MyClient extends JFrame implementsActionListener, Runnable {
Socket clientSocket;
JTextArea jTextReceive= newJTextArea();
JTextField jTextSend= newJTextField();
JButton jbc= new JButton("发送");
JScrollPane jsp= newJScrollPane(jTextReceive);boolean flag = true; //标记是否结束
Thread connenThread; //用于向服务器端发送信息
DataInputStream cin1;
DataOutputStream cout;static boolean flagclient = false;public static voidmain(String[] args) {newMyClient().clientStart();
}public synchronized void changeFlag(booleant) {
flagclient=t;
}public voidclientStart() {try { //连接服务器端,这里使用本机
this.setTitle("客户端,端口号:8080");this.setLayout(null);this.setBounds(20, 00, 300, 300);
jsp.setBounds(20, 20, 220, 100);
jTextSend.setBounds(20, 120, 220, 50);
jbc.setBounds(20, 170, 220, 30);this.add(jsp);this.add(jTextSend);this.add(jbc);this.setVisible(true);
jbc.addActionListener(this);
clientSocket= new Socket("localhost", 8080);
jTextReceive.setText("连接已经建立完毕!\n");while(flag) {try (InputStream is =clientSocket.getInputStream()) {
cin1= newDataInputStream(clientSocket.getInputStream());try (OutputStream os =clientSocket.getOutputStream()) {
cout= newDataOutputStream(os);
connenThread= new Thread(this);
connenThread.start();//启动线程,向服务器端发送信息
String aLine;while (true) {
aLine=cin1.readUTF();
jTextReceive.append("服务器发来信息:" + aLine + "\n");if (aLine.equals("bye")) {
flag= false;
connenThread.interrupt();break;
}
}
cout.close();
}
cin1.close();
}
clientSocket.close();//关闭Socket连接
System.exit(0);
}
}catch(Exception e) {
System.out.println(e);
}
}
@Overridepublic voidrun() {while (true) {try{
Thread.sleep(10);
}catch(InterruptedException ex) {
Logger.getLogger(MyClient.class.getName()).log(Level.SEVERE, null, ex);
}try{if (flagclient == true) {
String str=jTextSend.getText().trim();if(str==null||str.length()<=0){}else{
jTextReceive.append("发送消息:" + str + "\n");
cout.writeUTF(str);
cout.flush();}
jTextSend.setText(null);
changeFlag(false);
}
}catch(Exception e) {
System.out.println(e);
}
}
}
@Overridepublic voidactionPerformed(ActionEvent e) {
JButton jbt=(JButton) e.getSource();if (jbt == jbc) //若单击确认对话框中的“发送”按钮
{
changeFlag(true);
}
}
}//服务器端
packageyjd9;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.io.*;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.logging.Level;importjava.util.logging.Logger;import javax.swing.*;public class Myserver extends JFrame implementsActionListener, Runnable {
JTextArea jTextReceive= newJTextArea();
JTextField jTextSend= newJTextField();
JButton jbs= new JButton("发送");
ServerSocket server= null;
JScrollPane jsp= newJScrollPane(jTextReceive);
Socket clientSocket;//负责当前线程中C/S通信中的Socket对象
boolean flag = true; //标记是否结束
Thread connenThread; //向客户端发送信息的线程
BufferedReader sin; //输入流对象
DataInputStream sin1;
DataOutputStream sout;//输出流对象
boolean flags = false;public static voidmain(String[] args) {
Myserver MS= newMyserver();
MS.serverStart();
}public synchronized void changeFlag(booleant){
flags=t;
}public voidserverStart() {try{
server= new ServerSocket(8080); //建立监听服务
this.setTitle("服务器端,端口号:" +server.getLocalPort());this.setLayout(null);this.setBounds(20, 00, 300, 300);
jsp.setBounds(20, 20, 220, 100);
jTextSend.setBounds(20, 120, 220, 50);
jbs.setBounds(20, 170, 220, 30);this.add(jsp);this.add(jTextSend);this.add(jbs);this.setVisible(true);
jbs.addActionListener(this);while(flag) {
clientSocket=server.accept();
jTextReceive.setText("连接已经建立完毕!\n");try (InputStream is =clientSocket.getInputStream()) {
sin= new BufferedReader(newInputStreamReader(is));try (OutputStream os =clientSocket.getOutputStream()) {
sin1= newDataInputStream(clientSocket.getInputStream());
sout= newDataOutputStream(os);
connenThread= new Thread(this);
connenThread.start();//启动线程,向客户端发送信息
String aLine;while(true){
aLine=sin1.readUTF();
jTextReceive.append("客户端发来信息:" +aLine+"\n");if (aLine.equals("bye")) {
flag= false;
connenThread.interrupt();break;
}
}
sout.close();
}
sin.close();
}
clientSocket.close();//关闭Socket连接
System.exit(0); //程序运行结束
}
}catch(Exception e) {
System.out.println(e);
}
}
@Overridepublic voidrun() {while (true) {try{
Thread.sleep(10);
}catch(InterruptedException ex) {
Logger.getLogger(Myserver.class.getName()).log(Level.SEVERE, null, ex);
}try{if (flags == true) {
changeFlag(false);
String str=jTextSend.getText().trim();if(str==null||str.length()<=0){}else{
sout.writeUTF(str);
sout.flush();
jTextReceive.append("服务器发送消息:"+str+"\n"); }
jTextSend.setText("");
}
}catch(Exception e) {
System.out.println(e);
}
}
}
@Overridepublic void finalize() //析构方法
{try{
server.close();
}//停止ServerSocket服务
catch(IOException e) {
System.out.println(e);
}
}
@Overridepublic voidactionPerformed(ActionEvent e) {
JButton jbt=(JButton) e.getSource();if (jbt == jbs) //若单击确认对话框中的“发送”按钮
{
changeFlag(true);
}
}
}