服務器:
導入Java . io . *;
導入Java . net . *;
導入Java . util . *;
公共類ChatServer {
boolean started = false
ServerSocket ss = null
列表& lt客戶端& gtclients = new ArrayList & lt客戶端& gt();
公共靜態void main(String[] args) {
新的ChatServer()。start();
}
public void start() {
嘗試{
ss = new server socket(8888);
開始=真;
} catch (BindException e) {
System.out.println("端口正在使用中...");
System.out.println("請關閉相關程序,重新運行服務器!");
system . exit(0);
} catch (IOException e) {
e . printstacktrace();
}
嘗試{
當(開始){
socket s = ss . accept();
客戶c =新客戶;
System.out.println("客戶端已連接!");
新線程(c)。start();
clients . add(c);
}
} catch (IOException e) {
e . printstacktrace();
}最後{
嘗試{
ss . close();
} catch (IOException e) {
e . printstacktrace();
}
}
}
類客戶端實現Runnable {
私有套接字s;
私有DataInputStream dis = null
private data output stream dos = null;
private boolean b connected = false;
公共客戶端(套接字){
this.s = s
嘗試{
dis = new data inputstream(s . getinputstream());
dos = new data output stream(s . get output stream());
bConnected = true
} catch (IOException e) {
e . printstacktrace();
}
}
public void send(String str) {
嘗試{
dos . write utf(str);
} catch (IOException e) {
e . printstacktrace();
}
}
公共無效運行(){
嘗試{
while(b已連接){
string str = dis . read utf();
system . out . println(str);
for(int I = 0;我& ltclients . size();i++) {
client c = clients . get(I);
發送(str);
}
}
} catch (EOFException e) {
System.out.println("客戶端關閉!");
} catch (IOException e) {
e . printstacktrace();
}最後{
嘗試{
如果(dis!= null)dis . close();
如果(dos!= null)dos . close();
如果(s!= null) {
s . close();
//s = null;
}
} catch (IOException e1) {
e 1 . printstacktrace();
}
}
}
}
}
客戶端,打開兩個就可以聊天了...
導入Java . awt . *;
導入Java . awt . event . *;
導入Java . io . *;
導入Java . net . *;
公共類ChatClient擴展框架{
套接字s = null
DataOutputStream dos = null
DataInputStream dis = null
private boolean b connected = false;
TextField TF txt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread());
公共靜態void main(String[] args) {
新聊天客戶端()。launch frame();
}
公共void launchFrame() {
setLocation(400,300);
this.setSize(300,300);
add(tfTxt,BorderLayout。南);
add(taContent,BorderLayout。北);
pack();
this . addwindowlistener(new window adapter(){
@覆蓋
public void window closing(window event arg 0){
disconnect();
system . exit(0);
}
});
TF txt . addactionlistener(new TF listener());
set visible(true);
connect();
trecv . start();
}
公共void connect() {
嘗試{
s =新插座(" 127.0.0.1 ",8888);
dos = new data output stream(s . get output stream());
dis = new data inputstream(s . getinputstream());
System.out.println("connected!");
bConnected = true
} catch (UnknownHostException e) {
e . printstacktrace();
} catch (IOException e) {
e . printstacktrace();
}
}
公共void disconnect() {
嘗試{
dos . close();
dis . close();
s . close();
} catch (IOException e) {
e . printstacktrace();
}
}
私有類TFListener實現ActionListener {
public void action performed(action event e){
String str = tfTxt.getText()。trim();
TF txt . settext(" ");
嘗試{
dos . write utf(str);
dos . flush();
} catch (IOException e1) {
e 1 . printstacktrace();
}
}
}
私有類RecvThread實現Runnable {
公共無效運行(){
嘗試{
while(b已連接){
string str = dis . read utf();
tacontent . settext(tacontent . gettext()+str+' \ n ');
}
} catch (SocketException e) {
System.out.println("拜拜!");
} catch (IOException e) {
e . printstacktrace();
}
}
}
}