基于GUI的简单聊天室01
生活随笔
收集整理的這篇文章主要介紹了
基于GUI的简单聊天室01
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運用了Socket編程,gui,流的讀入和寫出,線程控制等
思路:
1、首先是在客戶端中先建立好聊天的GUI
2、建立服務器端,設置好端口號(用SocketServer),其中需要兩個boolean變量來分別表示服務器是否已經開啟和是否有客戶端連接進來,
利用while循環來讓服務器在開啟的情況下不斷接收客戶端的信息。利用DataOutputStream來進行通訊
3、客戶端連接服務器(Socket)
首先是客戶端的類
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException; import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField; /**
* 完成圖形界面
* @author Administrator
*
*/
public class ChatClient extends JFrame{
JTextField jTextField = new JTextField();
JTextArea jTextArea = new JTextArea();
Socket s;
DataOutputStream bo;
public static void main(String[] args) {
new ChatClient().launchFrame();
} public void launchFrame() {
setLocation(200, 150);
this.setSize(450, 450);
this.add(jTextArea,BorderLayout.NORTH);
this.add(jTextField,BorderLayout.SOUTH);
jTextField.addActionListener(new TFListener());
//pack();
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
disConnect();
System.exit(0);
}
});; setVisible(true);
connect();
} /**
* 建立連接的方法
* @throws IOException
* @throws UnknownHostException
*/
public void connect() {
try {
s = new Socket("127.0.0.1",8888);
bo = new DataOutputStream(s.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("連接成功");
}
/**
* 斷開連接,關閉資源的方法
*/
public void disConnect() {
try {
s.close();
bo.close();
} catch (IOException e1) {
e1.printStackTrace();
} } /**
* 內部類,實現監聽
* 將文本框中的輸入打印到文本域中
*
*/
private class TFListener implements ActionListener{ @Override
public void actionPerformed(ActionEvent e) {
String content = jTextField.getText().trim();
jTextArea.setText(content);
jTextField.setText("");
//將文本發送到服務器
try {
System.out.println(s);
bo.writeUTF(content);
bo.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
} }
}
然后是服務器的類
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket; public class ChatSever {
public static void main(String[] args) {
// 布爾類型變量表示服務器是否開著
boolean started = false;
ServerSocket ss = null;
Socket s = null;
DataInputStream bi = null;
// 建立服務端,8888為端口號
try {
ss = new ServerSocket(8888);
}
catch (BindException e) {
System.out.println("Socket has been used !");
System.out.println("請重啟服務器 !");
System.exit(0);
}catch (IOException e) {
e.printStackTrace();
}
// 服務器開啟后,started變為true
try {
started = true;
// 接受客戶端的連接
while (started) {
// 布爾類型變量bConnected表示有沒有用戶連接
boolean bConnected = false;
s = ss.accept();
// 服務器連接后bConnected為true
bConnected = true;
System.out.println("一個客戶連接");
bi = new DataInputStream(s.getInputStream());
while (bConnected) {
String str = bi.readUTF();
System.out.println(str);
//bi.close();
}
}
} catch (EOFException e) {
System.out.println("Client close!");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bi != null)
bi.close();
if (s != null)
s.close();
} catch (IOException e1) {
e1.printStackTrace();
} }
} }
總結
以上是生活随笔為你收集整理的基于GUI的简单聊天室01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp实现导航高亮的简单方法
- 下一篇: vim中的incsearch不好用,没有