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