要先打开服务器,然后才能连接客户端通信 |
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) 回复
谢谢分享
回复评论