java 单对单聊天_通信--局域网单对单聊天

[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(""); //将文本框清空

}

}

}

[源代码打包下载]

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值