XX学院java实验报告
再打开客户端,单击客户端的“连接服务器”按钮将与服务器建立连接;连接之后,双方在各自图形界面的文本框中填写要发送的信息,然后单击 “Send”按钮,就可以进行通信了。程序运行结果如图1所示。整个程序分成客户端和服务器端两大部分,分别保存成Client.java和Server.java两个文件。
图1 聊天程序运行界面(客户端和服务器端)
1.客户端程序代码:
import java.net.*; import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;
class Client extends JFrame implements ActionListener { Socket sock; //定义套接字对象 JTextArea t1=new JTextArea(); {
41
JTextField t2=new JTextField(20); JButton b1=new JButton(\); JButton b2=new JButton(\连接服务器\);
DataOutputStream out; //定义数据输出流 DataInputStream in; //定义数据输出流 public Client()
this.getContentPane().add(jsp,\); JPanel p1=new JPanel(); p1.add(t2); p1.add(b1); JPanel p2=new JPanel(); p2.add(b2);
this.getContentPane().add(p2,\); this.getContentPane().add(p1,\);
b1.addActionListener(this); b2.addActionListener(this); setTitle(\客户端\); setSize(340,200); setVisible(true); addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
setVisible(false); System.exit(0);
{ JScrollPane jsp=new JScrollPane(t1);
XX学院java实验报告
{ {
42
}
}
});
public void actionPerformed(ActionEvent e)
if(e.getSource() == b1){
try { }
out = new DataOutputStream(sock.getOutputStream()); String n = t2.getText(); out.writeUTF(n); t2.setText(\);
// TODO 自动生成 catch 块 e1.printStackTrace();
} catch (IOException e1) {
}
else if(e.getSource()==b2)
try { }
new Communnion(this).start();
sock = new Socket(\,7777); // TODO 自动生成 catch 块 e1.printStackTrace(); // TODO 自动生成 catch 块 e1.printStackTrace();
} catch (UnknownHostException e1) {
} catch (IOException e1) {
XX学院java实验报告
{ }
class Communnion extends Thread { { { { }
}
}
try { } try{
fp.out.close(); //关闭Socket输出流 fp.in.close(); //关闭Socket输入流
fp.in = new DataInputStream(fp.sock.getInputStream()); msg = fp.in.readUTF(); if(msg!=null){ }
// TODO 自动生成 catch 块 e.printStackTrace();
fp.t1.append(msg+\);
String msg=null; while(true) }
public void run()
this.fp=fp; Client fp;
Communnion(Client fp) }
Client mainFrame=new Client(); }
public static void main(String agrs[])
}
} catch (IOException e) {
fp.sock.close(); //关闭Socket }catch(Exception ee){}
2.服务器端代码:
43
XX学院java实验报告
package server;
import java.net.*; import java.io.*; import java.awt.*; import java.awt.event.*;
import javax.swing.*;
class Server extends JFrame implements ActionListener { {
ServerSocket serverSock ; //定义服务器套接字 Socket sock; //定义客户套接字 JTextArea t1=new JTextArea(); JTextField t2=new JTextField(20); JButton b1=new JButton(\);
DataOutputStream out; //定义数据输出流 DataInputStream in; //定义数据输入流 String cname=null;
public Server() throws IOException
serverSock = new ServerSocket(7777); JScrollPane jsp=new JScrollPane(t1); this.getContentPane().add(jsp,\); JPanel p1=new JPanel(); p1.add(t2); p1.add(b1);
this.getContentPane().add(p1,\); b1.addActionListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ }
setVisible(false); System.exit(0);
});
setTitle(\服务器\); setSize(340,200); setVisible(true); try{
sock=serverSock.accept(); //使用accept()阻塞等待客户请求,
44