//服務器代碼,
打包消息;
導入Java . io . *;
導入Java . net . *;
導入Java . util . *;
公共類服務器{
公共靜態void main(String[] args)引發異常{
System.out.print("服務器");
server socket socket = new server socket(8888);
向量v =新向量();
while(true){
socket sk = socket . accept();
data inputstream in = new data inputstream(sk . getinputstream());
data output stream out = new data output stream(sk . get output stream());
v . add(sk);
新服務器線程(in,v)。start();
}
}
}
//ServerThread.java代碼
打包消息;
導入Java . net . *;
導入Java . io . *;
導入Java . util . *;
公共類ServerThread擴展線程{
DataInputStream in
矢量所有;
公共服務器線程(DataInputStream in,Vector v){
this.in = in
this . all = v;
}
公共無效運行()
{
while(真)
{
嘗試{
string s 1 = in . read utf();
for(int I = 0;我& ltall . size();i++)
{
object obj = all . get(I);
Socket Socket =(Socket)obj;
data output stream out = new data output stream(socket . get output stream());
out . write utf(s 1);
System.out.print(壹);
out . flush();
}
System.out.print("消息發送完畢!");
} catch(Exception e){ e . printstacktrace();};
}
}
}
//ClientFrame.java代碼
打包消息;
導入Java . awt . *;
導入Java . awt . event . *;
導入javax . swing . *;
導入Java . net . *;
導入Java . io . *;
公共類ClientFrame擴展JFrame實現ActionListener{
JButton b 1 = new JButton(" SendMessage ");
JButton b2=new JButton("鏈接服務器");
JTextField t 1 = new JTextField(20);
JTextField T2 = new JTextField(20);
JLabel l=new JLabel("輸入服務器名:");
JTextArea area = new JTextArea(10,20);
JPanel p 1 = new JPanel();
JPanel p2 = new JPanel();
JPanel P3 = new JPanel();
JPanel P4 = new JPanel();
插座插座;
公共客戶端框架()
{
this.getContentPane()。添加(p 1);
p2.add(新JScrollPane(area));
P3 . add(t 1);
P3 . add(b 1);
P4 . add(l);
P4 . add(T2);
P4 . add(B2);
p2 . set layout(new flow layout());
P3 . set layout(new flow layout());
P4 . set layout(new FlowLayout());
p 1 . set layout(new BorderLayout());
p1.add("北",p2);
p1.add("中心",P3);
p1.add("南",P4);
b 1 . addactionlistener(this);
B2 . addactionlistener(this);
this . pack();
show();
}
公共無效操作已執行(操作事件e)
{
if(e.getActionCommand()。equals("鏈接服務器"))
{
嘗試{
socket=new Socket(t2.getText(),8888);
B2 . set enabled(false);
joptionpane . showmessagedialog(this,“連接成功”);
data inputstream in = new data inputstream(socket . getinputstream());
新的ClientThread(在,區域中)。start();
}
catch(異常e1){
joptionpane . showmessagedialog(this,“連接錯誤”);
e 1 . printstacktrace();};
}
else if(e.getActionCommand()。equals("SendMessage "))
{
嘗試{
data output stream out = new data output stream(socket . get output stream());
out . write utf(t 1 . gettext());
t 1 . settext(" ");
}catch(異常e 1){ e 1 . printstacktrace();};
}
}
}
//ClientThread.java代碼
打包消息;
導入Java . net . *;
導入Java . io . *;
導入javax . swing . *;
公共類ClientThread擴展線程{
DataInputStream in
JTextArea地區;
public client thread(data inputstream in,JTextArea area){
this.in = in
this.area = area
}
公共無效運行()
{
while(true){
嘗試{
string s = in . read utf();
area.append
}
catch(異常e){ e . printstacktrace();};
}
}
}
//Client.java代碼
打包消息;
公共類客戶端{
/**
* @param args
*/
公共靜態void main(String[] args) {
new client frame();
}
}
//每壹段代碼都是壹個類,所以不要放在壹個文件裏。運行Client.java。
祝妳好運!