java socket 单例_java socket 简单实例(线程)

2023-05-16

这是一个简单的socket测试实例, 应用Javaswing、线程。

客户端类

package com.xyb.fhy.socketthreadtest;

import java.awt.Container;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

/**

* 多线程客户端socket连接

*

* @gsm FHY

* @date 2014-5-19

* @time 下午03:00:56

* @author XieYB

* @version 1.0.0 XieYB

*/

public class Client extends JFrame implements Runnable {

private static final long serialVersionUID = 342677620286532450L;

// 桌面应用文本区域

JTextArea jta = new JTextArea();

// 桌面应用文本框

JTextField jtxt = new JTextField();

// socket对象

Socket socket = null;

// 缓存字符流

BufferedReader bu = null;

BufferedWriter bw = null;

public Client() {

// 创建桌面应用的容器

Container con = this.getContentPane();

// 设置容器布局

con.setLayout(null);

// 设置桌面滚动条

JScrollPane jsp = new JScrollPane(jta);

// 设置大小

jsp.setBounds(10, 10, 400, 400);

// 将文本信息加入到容器

con.add(jsp);

// 设置文本框位置

jtxt.setBounds(30, 420, 100, 20);

// 将文本框加入到容器

con.add(jtxt);

// 设置点击按钮

JButton jb = new JButton("发送信息");

// 设置按钮位置

jb.setBounds(140, 420, 100, 20);

// 将按钮添加到容器

con.add(jb);

// 添加按钮事件

jb.addActionListener(new ClientSendMessage(this));

// 设置容器大小

this.setSize(500, 500);

// 设置容器名称

this.setTitle("客户端");

// 设置默认关闭操作

this.setDefaultCloseOperation(3);

// 设置是否显示该容器

this.setVisible(true);

openClient();

}

// 客户端socket方法

private void openClient() {

try {

// 获取服务器端IP地址,端口号

this.socket = new Socket("127.0.0.1", 8888);

// 读取服务器传过的信息流

this.bu = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

// 向服务器端发送信息流

this.bw = new BufferedWriter(new OutputStreamWriter(

socket.getOutputStream()));

} catch (IOException e) {

System.out.println("客户端socket处理信息错误!");

}

//调用线程

Thread thread = new Thread(this);

//启动一个线程

thread.start();

}

// 线程入口点

public void run() {

//无限循环,不关闭客户端信息

while (true) {

try {

//读取服务器发送信息

String info = bu.readLine();

//将信息加入到桌面应用文本域中

this.jta.append("服务器说:" + info + "\n");

} catch (IOException e) {

System.out.println("读取服务器端信息出错!");

}

}

}

//主程序入口点

public static void main(String[] args) {

new Client();

}

}

swing 客户端事件类

package com.xyb.fhy.socketthreadtest;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

/**

* 添加桌面应用事件

*

* @gsm FHY

* @date 2014-5-19

* @time 下午03:34:25

* @author XieYB

* @version 1.0.0 XieYB

*/

public class ClientSendMessage implements ActionListener {

// 获取client桌面

Client jframe;

//带参数构造方法

public ClientSendMessage(Client jframe) {

//对象复制

this.jframe = jframe;

}

//action执行完成事件

public void actionPerformed(ActionEvent arg0) {

//获取client容器中文本框的值

String message = jframe.jtxt.getText();

//将文本框中的值加入到文本域中

jframe.jta.append("客户端说:" + message + "\n");

//将文本框的值设置为空

jframe.jtxt.setText("");

try {

//将信息加入到输出流中

jframe.bw.append(message);

//设置换行信息

jframe.bw.newLine();

//刷新流,让服务及时显示信息

jframe.bw.flush();

} catch (IOException e) {

System.out.println("ClientSendMessage加入流出错");

}

}

}

服务器端类

package com.xyb.fhy.socketthreadtest;

import java.awt.Container;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

/**

*

* 多线程服务器端Socket连接

*

* @gsm FHY

* @date 2014-5-19

* @time 下午03:44:59

* @author XieYB

* @version 1.0.0XieYB

*/

public class Server extends JFrame implements Runnable{

private static final long serialVersionUID = 3235601621525888716L;

// 桌面应用文本区域

JTextArea jta = new JTextArea();

// 桌面应用文本框

JTextField jtxt = new JTextField();

//服务器端socket对象

ServerSocket server;

// socket对象

Socket socket = null;

// 缓存字符流

BufferedReader bu = null;

BufferedWriter bw = null;

public Server() {

// 创建桌面应用的容器

Container con = this.getContentPane();

// 设置容器布局

con.setLayout(null);

// 设置桌面滚动条

JScrollPane jsp = new JScrollPane(jta);

// 设置大小

jsp.setBounds(10, 10, 400, 400);

// 将文本信息加入到容器

con.add(jsp);

// 设置文本框位置

jtxt.setBounds(30, 420, 100, 20);

// 将文本框加入到容器

con.add(jtxt);

// 设置点击按钮

JButton jb = new JButton("发送信息");

// 设置按钮位置

jb.setBounds(140, 420, 100, 20);

// 将按钮添加到容器

con.add(jb);

// 添加按钮事件

jb.addActionListener(new SeverSendMessage(this));

// 设置容器大小

this.setSize(500, 500);

// 设置容器名称

this.setTitle("服务器端");

// 设置默认关闭操作

this.setDefaultCloseOperation(3);

// 设置是否显示该容器

this.setVisible(true);

openClient();

}

// 客户端socket方法

private void openClient() {

try {

// 设置端口号

server = new ServerSocket(8888);

//socket监听

socket = server.accept();

// 读取客户端传过的信息流

this.bu = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

// 向客户端发送信息流

this.bw = new BufferedWriter(new OutputStreamWriter(

socket.getOutputStream()));

} catch (IOException e) {

System.out.println("服务器端socket处理信息错误!");

}

//调用线程

Thread thread = new Thread(this);

//启动一个线程

thread.start();

}

// 线程入口点

public void run() {

//无限循环,不关闭服务器端信息

while (true) {

try {

//读取客户端发送信息

String info = bu.readLine();

//将信息加入到桌面应用文本域中

this.jta.append("客户端说:" + info + "\n");

} catch (IOException e) {

System.out.println("读取客户端信息出错!");

}

}

}

//主程序入口点

public static void main(String[] args) {

new Server();

}

}

swing 服务器端事件类

package com.xyb.fhy.socketthreadtest;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

/**

* 服务器端桌面监听事件

*

* @gsm FHY

* @date 2014-5-19

* @time 下午03:54:14

* @author XieYB

* @version 1.0.0XieYB

*/

public class SeverSendMessage implements ActionListener {

// 获取Server桌面

Server jframe;

//带参数构造方法

public SeverSendMessage(Server jframe) {

//对象复制

this.jframe = jframe;

}

//action执行完成事件

public void actionPerformed(ActionEvent arg0) {

//获取Server容器中文本框的值

String message = jframe.jtxt.getText();

//将文本框中的值加入到文本域中

jframe.jta.append("服务器说:" + message + "\n");

//将文本框的值设置为空

jframe.jtxt.setText("");

try {

//将信息加入到输出流中

jframe.bw.append(message);

//设置换行信息

jframe.bw.newLine();

//刷新流,让客户端及时显示信息

jframe.bw.flush();

} catch (IOException e) {

System.out.println("SeverSendMessage加入流出错");

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java socket 单例_java socket 简单实例(线程) 的相关文章

随机推荐