博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java使用socket实现客户端与服务器聊天(二)简单实现图形界面
阅读量:3949 次
发布时间:2019-05-24

本文共 5219 字,大约阅读时间需要 17 分钟。

Client类:

import java.awt.TextArea;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;import javax.swing.JTextArea;import javax.swing.JTextField; public class Client {
Socket socket; JTextField a2; JTextArea area; public Client(JTextField a2,JTextArea area) {
this.a2=a2; this.area=area; try {
socket =new Socket("localhost",5252); In ta=new In(socket,area); Out te=new Out(socket,a2); new Thread(ta).start(); new Thread(te).start(); } catch (UnknownHostException e) {
// TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) {
// TODO 自动生成的 catch 块 e.printStackTrace(); } }}

Server类:

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JTextArea;import javax.swing.JTextField; public class Server {
ServerSocket server; Socket socket; JTextField a2;//发送信息文本框 JTextArea area;//接受文本框 String text=""; public Server(JTextField a2,JTextArea area) {
this.a2=a2; try {
server=new ServerSocket(5252); socket = server.accept(); In ta=new In(socket,area); Out te=new Out(socket,a2); new Thread(ta).start(); new Thread(te).start(); } catch (IOException e) {
e.printStackTrace(); } } }

接受信息In类:

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;import javax.swing.JTextArea;public class In implements Runnable {
private Socket socket; private JTextArea area; public In(Socket socket,JTextArea area) {
this.socket=socket; this.area=area; } public void run() {
// TODO 自动生成的方法存根 try {
while(true) {
InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "UTF-8"); BufferedReader br = new BufferedReader(isr); area.setText(br.readLine()); } }catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

发送消息Out类:

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;import javax.swing.JTextField;public class Out implements Runnable{
Scanner sc=new Scanner(System.in); private Socket socket; private String text; JTextField a2; public Out(Socket socket,JTextField a2) {
this.socket=socket; this.a2=a2; } @Override public void run() {
// TODO 自动生成的方法存根 OutputStream out; try {
out = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8"); PrintWriter pw = new PrintWriter(osw, true); a2.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根 pw.println(a2.getText()); } }); } catch (IOException e) {
// TODO 自动生成的 catch 块 e.printStackTrace(); } } }

服务器窗口ServerWindow

import javax.swing.*;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class ServerWindow {
public static void main(String[] args) {
JFrame win=new JFrame("Tencent QQ"); win.setBounds(200, 100, 1100, 800);//窗口的大小定义 win.setVisible(true); win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //输入的面板 JPanel panel=new JPanel(); JTextArea area=new JTextArea(30,80); JTextField toip=new JTextField(30); JTextField duan=new JTextField(30); area.setLineWrap(true); panel.add(toip); panel.add(duan); panel.add(area,"South"); win.add(panel); //输出的面板 JPanel panel2=new JPanel(); JTextField a2=new JTextField(60); a2.setBounds(0, 0,60, 50); panel2.add(a2); win.add(panel2,"South"); //按钮“发送” JButton Song=new JButton("发送"); panel2.add(Song); Server b=new Server(a2,area); }}

用户窗口UserWindow:

import javax.swing.*;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class UserWindow {
public static void main(String[] args) {
JFrame win=new JFrame(" QQ"); win.setBounds(200, 100, 1100, 800);//窗口的大小定义 win.setVisible(true); win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //输入的面板 JPanel panel=new JPanel(); JTextArea area=new JTextArea(30,80); JTextField toip=new JTextField(30); JTextField duan=new JTextField(30); area.setLineWrap(true); panel.add(toip); panel.add(duan); panel.add(area,"South"); win.add(panel); //输出的面板 JPanel panel2=new JPanel(); JTextField a2=new JTextField(60); a2.setBounds(0, 0,60, 50); panel2.add(a2); win.add(panel2,"South"); //按钮“发送” JButton Song=new JButton("发送"); panel2.add(Song); Client client=new Client(a2,area); }}

运行结果:

目前程序存在问题:说完话后不能自动清空输入框内容,以及接受框不会自动换行,已经ip和端口没有完善

转载地址:http://garwi.baihongyu.com/

你可能感兴趣的文章
mysql学习使用一(查询)
查看>>
Linux 学习之sed命令详解
查看>>
JAVA基础——常用IO使用
查看>>
spring框架pom.xml文件解析
查看>>
代码比较工具DiffMerge的下载和使用
查看>>
linux学习之vim全选,全部复制,全部删除
查看>>
linux 学习之awk命令
查看>>
linux学习之查找文件find,locate,whereis使用
查看>>
JS中$含义及用法
查看>>
web学习之ajax记录
查看>>
mysql存储过程 --游标的使用 取每行记录
查看>>
ranger通过web界面登录用户验证类UsernamePasswordAuthenticationFilter
查看>>
墨菲定律——职场
查看>>
java匿名内部类原理及使用
查看>>
java基础学习之Timer定时器使用
查看>>
Linux中修改环境变量及快速生效方法
查看>>
解决报错 “build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
查看>>
linux学习之tr操作符用法
查看>>
shell的dirname $0和readlink用法
查看>>
设计模式——外观模式详解
查看>>