java socket通信 从客户端传数字到服务器动态显示

来源:互联网 发布:mac iphone 铃声 编辑:程序博客网 时间:2024/05/01 08:18

java socket通信:从客户端传入一个循环数组写到输出流中,服务器不断的接受客户端数字然后动态的显示

1.客户端 client01

 

package socket01;import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class client01 {public static void main(String[] args) {// TODO Auto-generated method stubSocket socket = null;PrintWriter pw = null;int arr[] = { 10, 23, 56, 96, 20, 31, 46, 65, 52, 1, 25, 12, 162, 186, 55, 63, 55, 96, 92, 6, 55, 33, 5, 11, 5,16, 41 };try {} catch (Exception e) {e.printStackTrace();} finally {try {// 客户端socket指定服务器的地址和端口号socket = new Socket("10.128.47.166", 3342);pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));while (true) {for (int i = 0; i < arr.length; i++) {pw.println(arr[i]);// println方法相当于write方法pw.flush();}}} catch (IOException e) {e.printStackTrace();} finally {try {pw.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}}}

1.服务端 sever01

 

package socket01;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.Collections;import java.util.List;import javax.swing.JFrame;import javax.swing.JPanel;public class sever01 extends JPanel {// TODO Auto-generated method stubServerSocket s = null;Socket socket = null;BufferedReader br = null;private List<Integer> values;private static final int MAX_VALUE = 80;// 接受到数据的最大值private static final int MAX_COUNT_OF_VALUES = 50;// 最多保存数据的个数// 构造器搞起public sever01() {values = Collections.synchronizedList(new ArrayList<Integer>());new Thread(new Runnable() {public void run() {try {// 设定服务端的端口号s = new ServerSocket(3342);System.out.println("ServerSocket Start:" + s);// 等待请求,此方法会一直阻塞,直到获得请求才往下走socket = s.accept();br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 用于发送返回信息,可以不需要装饰这么多io流使用缓冲是发送数据要注意调用.flush()方法while (true) {for (int i = 0; i < 50; i++) {String ss = br.readLine();repaint();values.add(Integer.parseInt(ss));Thread.sleep(200);}}} catch (Exception e) {e.printStackTrace();} finally {System.out.println("Close....");try {br.close();socket.close();s.close();} catch (Exception e2) {e2.printStackTrace();}}}}).start();}public void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2d = (Graphics2D) g;Color c = new Color(200, 70, 0);g.setColor(c);// 要绘制平滑点曲线g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);int w = getWidth();// 数据在整个屏幕中的宽度int h = getHeight();// 数据波形的高度int xDelta = w / MAX_COUNT_OF_VALUES;int length = values.size();for (int i = 0; i < length - 1; ++i) {g2d.drawLine(xDelta * (MAX_COUNT_OF_VALUES - length + i), normalizeValueForYAxis(values.get(i), h),xDelta * (MAX_COUNT_OF_VALUES - length + i + 1), normalizeValueForYAxis(values.get(i + 1), h));}}private int normalizeValueForYAxis(int value, int height) {return (int) ((double) height / MAX_VALUE * value);}private static void createGuiAndShow() {JFrame frame = new JFrame("socket 接受数据界面显示");frame.getContentPane().add(new sever01());frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 400);frame.setLocationRelativeTo(null);frame.setVisible(true);}public static void main(String[] args) {createGuiAndShow();}}


 

1 0
原创粉丝点击