1、方案介绍
应用程序通过使用用于描述IP地址和端口的“套接字”-Socket向网络发出请求或应答网络请求。Socket和ServerSocket类库位于Java.net包中。前者是建立网络连接时使用的,后者则是用于服务端的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例可完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生级别差别。他们的工作是通过SocketImpl类及其之类完成的。
程序包括服务器和客户端。详细原理图如下所示:
2、程序运行
程序运行之前,我们需要知道服务器端主机所在网络的地址,使用cmd查看如下:
该IPv4地址是172.16.80.88,子网掩码为255.255.255.0,默认网关是172.16.80.254。我们将得到的IP改写入客户端的相应地方即可。打开程序后,服务器处于监听状态。
服务器端代码
packageServer_Client;import javax.swing.*;import java.net.*;import java.lang.*;import java.awt.event.*;import java.io.*;public classServer {
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JScrollPane jsp=null;
JPanel jpl=null;
PrintWriter pw=null;public static voidmain(String[] args) {
MyServer msv=newMyServer();
}public voidMyServer(){
jta=newJTextArea();
jtf=new JTextField(20);
jsp=newJScrollPane(jta);
jb=new JButton("send");
jb.addActionListener(this);
jpl=newJPanel();this.add(jsp,"Center");
jpl.add(jtf);
jpl.add(jb);this.add(jsp,"South");this.setTitle("Server");this.setSize(400,300);this.setVisible(true);try{
ServerSocket ss=new ServerSocket(6666);//服务器监听
Socket s=ss.accept();
InputStreamReader isr=newInputStreamReader(s.getInputStream());
BufferedReader br=newBufferedReader(isr);
pw=new PrintWriter(s.getOutputStream(),true);while(true)
{
String info=br.readLine();//读取信息
jta.append("客户端对服务器说:"+info+"\r\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
@Overridepublic voidactionPerformed(ActionEvent e){//如果按下发送按钮if(e.getSource()==jb){
String info=jtf.getText();
jta.append("服务器对客户端说:"+info+"\r\n");
pw.println(info);
jtf.setText("");
}
}
}
客户端代码
packageServer_Client;import javax.swing.*;import java.net.*;import java.awt.event.*;import java.io.*;public classClient {
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JScrollPane jsp=null;
JPanel jpl=null;
PrintWriter pw=null;public static voidmain(String[] args) {
MyClient met=newMyClient();
}publicMyClient()
{
jta=newJTextArea();
jtf=new JTextField(20);
jsp=newJScrollPane(jta);
jb=new JButton("send");
jb.addActionListener(this);
jpl=newJPanel();this.add(jsp,"Center");
jpl.add(jtf);
jpl.add(jb);this.add(jsp,"South");this.setTitle("Client");this.setSize(400,300);this.setVisible(true);try{
ServerSocket s=new ServerSocket("172.16.80.88",6666);
InputStreamReader isr=newInputStreamReader(s.getInputStream());
BufferedReader br=newBufferedReader(isr);
pw=new PrintWriter(s.getOutputStream(),true);while(true)
{
String info=br.readLine();//读取从服务器发来的信息
jta.append("客户端对服务器说:"+info+"\r\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
@Overridepublic voidactionPerformed(ActionEvent e){if(e.getSource()==jb){
String info=jtf.getText();
jta.append("客户端对服务器说:"+info+"\r\n");
pw.println(info);
}
}
}
运行结果图如下: