
要先打开服务器,然后才能连接客户端通信 |
1.服务器 |
package s122803可视化主机与客户端通信; |
//凡是网络通信相关,都要这2个包 |
import java.awt.BorderLayout; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import java.io.*; |
import java.net.*; |
import javax.swing.JButton; |
import javax.swing.JFrame; |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.JTextArea; |
import javax.swing.JTextField; |
public class Server extends JFrame implements ActionListener{ |
|
|
JTextArea jta=null; |
JButton jb=null; |
JTextField jtf=null; |
JPanel jp=null; |
JScrollPane jsp=null; |
PrintWriter pw=null; |
|
public Server() |
{ |
|
//设置窗体属性************************************************************ |
jta=new JTextArea(); |
jb=new JButton("发送"); |
jb.addActionListener(this); // |
jtf=new JTextField(15); |
jp=new JPanel(); jp.add(jtf); jp.add(jb); |
jsp=new JScrollPane(jta); |
|
this.setTitle("服务器");//设置窗体的标题 |
this.setSize(400,300);//设置窗体的大小 |
this.setDefaultCloseOperation(3);//设置关闭的方式 |
this.setLocationRelativeTo(null);//设置窗体出现在屏幕中间 |
this.setResizable(false);//设置窗体不可改变大小 |
this.setLayout(new BorderLayout());//设置窗体为空布局 |
this.add(jsp,BorderLayout.CENTER); |
this.add(jp,BorderLayout.SOUTH); |
this.setVisible(true); |
//设置窗体属性************************************************************ |
|
try{ |
ServerSocket ss=new ServerSocket(9999); //设置服务器端口是9999 |
Socket s=ss.accept(); //监听是否有客户端登陆,只有为true才会执行下面的代码 |
//而且监听到的端口赋给s,s就表示连接的客户端端口 |
|
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); |
/*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据 |
上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream()); |
BufferedReader br=new BufferedReader(aa); 将字节流放入缓冲池 */ |
pw=new PrintWriter(s.getOutputStream(),true); |
jta.setText("客户端已接入"+"\r\n"); |
String aa="已成功连接服务器"; |
pw.println(aa); |
|
while(true) |
{ |
String xinxi=br.readLine(); |
jta.append("客户端:"+xinxi+"\r\n"); |
} |
} catch(Exception e){} |
|
|
} |
|
public static void main(String[] args) |
{ |
new Server(); |
} |
public void actionPerformed(ActionEvent e) { |
if(e.getActionCommand().equals("发送")) |
{ |
String xinxi=jtf.getText(); |
jta.append("服务器:"+xinxi+"\r\n"); |
pw.println(xinxi); |
jtf.setText(""); |
} |
|
} |
|
} |
|
2.客户端 |
package s122803可视化主机与客户端通信; |
import java.io.BufferedReader; |
import java.io.InputStreamReader; |
import java.io.PrintWriter; |
import java.net.Socket; |
import java.awt.BorderLayout; |
import java.awt.event.*; |
import javax.swing.*; |
public class Client extends JFrame implements ActionListener |
{ |
//声明各组件************************ |
JTextArea jta=null; |
JButton jb=null; |
JTextField jtf=null; |
JPanel jp=null; |
JScrollPane jsp=null; |
PrintWriter pw=null; |
//声明各组件************************ |
|
public static void main(String[] args) |
{new Client(); } |
|
public Client() |
{ |
|
//设置窗体属性************************************************************ |
jta=new JTextArea(); //创建文本域对象 |
jb=new JButton("发送"); //创建按钮对象 |
jb.addActionListener(this); //给按钮添加事件源对象 |
jtf=new JTextField(15); //创建文本框对象 |
jp=new JPanel(); jp.add(jtf); jp.add(jb); //创建界面对象jp,在界面中添加文本框和按钮 |
jsp=new JScrollPane(jta); //在滚动条中添加文本域 |
|
this.setTitle("客户端"); //设置窗体的标题 |
this.setSize(400,300); //设置窗体的大小 |
this.setDefaultCloseOperation(3); //设置关闭的方式 |
this.setLocationRelativeTo(null); //设置窗体出现在屏幕中间 |
this.setResizable(false); //设置窗体不可改变大小 |
this.setLayout(new BorderLayout()); //设置窗体为空布局 |
this.add(jsp,BorderLayout.CENTER); //将面板jsp添加到窗体的中间区域 |
this.add(jp,BorderLayout.SOUTH); //将面板jp添加到窗体的下方区域 |
this.setVisible(true); //设置窗体可见 |
//设置窗体属性************************************************************ |
|
try{ |
Socket s=new Socket("127.0.0.1",9999); //服务器地址为127.0.0.1,端口号是9999 |
pw=new PrintWriter(s.getOutputStream(),true); //pw用来存要发送的信息 |
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); |
/*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据 |
上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream()); |
BufferedReader br=new BufferedReader(aa); 将字节流放入缓冲池 */ |
while(true) |
{ |
String xinxi=br.readLine(); //读取客户端发送的信息,读取一行 |
jta.append("服务器:"+xinxi+"\r\n"); //文本域显示读取到的信息 |
} |
} catch(Exception e){} |
|
|
} |
public void actionPerformed(ActionEvent e) |
{ |
if(e.getActionCommand().equals("发送")) //如果按钮被点击 |
{ String xinxi=jtf.getText(); //得到文本框输入的内容 |
jta.append("客户端:"+xinxi+"\r\n"); //将输入的内容显示在文本域中 |
pw.println(xinxi); //将我要发送的信息发送出去 |
jtf.setText(""); //将文本框清空 |
} |
} |
|
|
} |
|
|
|
|




初级程序员
by: zzvzz 发表于:2016-04-28 12:49:18 顶(0) | 踩(0) 回复
谢谢分享
回复评论