小编典典

基于此示例,这是一个使用Swing的简单网络客户端/服务器对。请注意与正确同步有关的一些问题:GUI本身是使用事件分配线程构建的invokeLater()。此外,代码还依赖的线程安全性append()。最后,它结合了文章Text Area Scrolling中的一个方便提示。

更新:在Java 7中,append()不再标记为线程安全;invokeLater()用于display()序列更新。

package net;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

import java.util.Scanner;

import javax.swing.*;

import javax.swing.text.DefaultCaret;

/**

* A simple network client-server pair

* @http://stackoverflow.com/questions/3245805

*/

public class Echo implements ActionListener, Runnable {

private static final String HOST = "127.0.0.1";

private static final int PORT = 12345;

private final JFrame f = new JFrame();

private final JTextField tf = new JTextField(25);

private final JTextArea ta = new JTextArea(15, 25);

private final JButton send = new JButton("Send");

private volatile PrintWriter out;

private Scanner in;

private Thread thread;

private Kind kind;

public static enum Kind {

Client(100, "Trying"), Server(500, "Awaiting");

private int offset;

private String activity;

private Kind(int offset, String activity) {

this.offset = offset;

this.activity = activity;

}

}

public Echo(Kind kind) {

this.kind = kind;

f.setTitle("Echo " + kind);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getRootPane().setDefaultButton(send);

f.add(tf, BorderLayout.NORTH);

f.add(new JScrollPane(ta), BorderLayout.CENTER);

f.add(send, BorderLayout.SOUTH);

f.setLocation(kind.offset, 300);

f.pack();

send.addActionListener(this);

ta.setLineWrap(true);

ta.setWrapStyleWord(true);

DefaultCaret caret = (DefaultCaret) ta.getCaret();

caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

display(kind.activity + HOST + " on port " + PORT);

thread = new Thread(this, kind.toString());

}

public void start() {

f.setVisible(true);

thread.start();

}

//@Override

public void actionPerformed(ActionEvent ae) {

String s = tf.getText();

if (out != null) {

out.println(s);

}

display(s);

tf.setText("");

}

//@Override

public void run() {

try {

Socket socket;

if (kind == Kind.Client) {

socket = new Socket(HOST, PORT);

} else {

ServerSocket ss = new ServerSocket(PORT);

socket = ss.accept();

}

in = new Scanner(socket.getInputStream());

out = new PrintWriter(socket.getOutputStream(), true);

display("Connected");

while (true) {

display(in.nextLine());

}

} catch (Exception e) {

display(e.getMessage());

e.printStackTrace(System.err);

}

}

private void display(final String s) {

EventQueue.invokeLater(new Runnable() {

//@Override

public void run() {

ta.append(s + "\u23CE\n");

}

});

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

//@Override

public void run() {

new Echo(Kind.Server).start();

new Echo(Kind.Client).start();

}

});

}

}

2020-02-26

java applet socket_Java swing applet中使用的套接字相关推荐

  1. Java Socket:飞鸽传书的网络套接字

    在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快.会辨认方向的优点,对其进行了驯化,用来进行消息的传递--也就是所谓的"飞鸽传书".而在 Java 中,网络套接字(S ...

  2. Java怎么重复使用套接字_在java中连续地通过套接字传输数据

    我想通过推送和拉动异步发送/接收从一个端点到另一个端点(peer2peer)的连续数据流 因此,为了首先解决通信,我开始使用jax-ws soap绑定webservice,因为它有一个端点和推送机制的 ...

  3. JMeter中的HTTPS套接字错误

    Apache JMeter对启用SSL的应用程序执行性能和/或负载测试时,SSL套接字错误可能是经常遇到的麻烦,严重阻碍了您的测试工作.本文重点介绍如何通过相应地配置和调优JMeter来克服这些与连接 ...

  4. Java Web 实战 15 - 计算机网络之网络编程套接字

    文章目录 一 . 网络编程中的基本概念 1.1 网络编程 1.2 客户端(client) / 服务器(server) 1.3 请求(request) / 响应(response) 1.4 客户端和服务 ...

  5. linux通信中recv,linux套接字通信之recv中的缓存机制的研究

    以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,如果这个套接字没有被调用recv函数接受数据包,那么这个套接字能接受到数据包吗? 或者这样说,如果我的程序注册了一个套接字去接受数据包,但是每 ...

  6. 关于.NET中socket中的异步套接字的研究二

    三 异步套接字 虽然还有许多别的方法解决同步套接字中的问题的方法,但是综合比较来看,异步套接字无疑是大多数情况下最好的解决办法,这个问题稍后讨论. 1 原理 首先来说一下异步的原理(根据自己的理解写的 ...

  7. java swing 空白_关于Java:在Swing GUI中提供空白

    没有空格的GUI显得"拥挤". 如何提供空白而不诉诸显式设置组件的位置或大小? -------------------------------------------------- ...

  8. linux 全双工 wifi热点,Linux中的同时套接字读/写(“全双工”)(特别是aio)

    我正在移植构建在ACE Proactor框架之上的应用程序.该应用程序适用于VxWorks和Windows,但在使用librt的内核2.6.X.X的Linux(CentOS 5.5,WindRiver ...

  9. python redis模块connectionerror_ConnectionError:Error 2连接到Python/Django Redis中的unix套接字...

    我正在尝试在一个全新的Mac上运行一个django项目.它一直工作到昨天,我不知道发生了什么,但突然间我开始收到Redis错误.在 我可以加载不查询数据库的页面,但是一旦我尝试进行搜索(部分依赖于Re ...

最新文章

  1. ant+svn+tomcat实现项目自动部署
  2. 10个美丽的例子,插图在网页设计中的应用
  3. js父元素获取子元素img_css,前端_父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?,css,前端 - phpStudy...
  4. python基础教程3下载-Python基础教程第3版中国PDF电子书免费下载
  5. 浏览文件神器!且可以计算所有文件代码的行数!
  6. 《网络营销实战密码》书评征文获奖名单揭晓
  7. pythonweb测试_python的web自动化测试
  8. 机器学习大作业_机器学习编程作业6-支持向量机(Python版)
  9. 《统计学》第八版贾俊平第三章课后答案Excel
  10. Python剑指offer之两个栈实现一个队列-两个队列实现一个栈
  11. 爱德泰科普 | 了解单模光纤跳线和多模光纤跳线,看着一篇就够了
  12. 是修修补补,还是买件新衣
  13. Oracle 12c中的MGMTDB
  14. PDF文件如何提取页面,PDF提取页面的小技巧
  15. Cesium 开启场景FPS显示
  16. 尝试用Unity还原蔚蓝(Celeste)—— 真·操控、移动、手感篇
  17. 16 个百度网盘搜索引擎
  18. 为什么IOS比安卓流畅
  19. matlab 读ctl,用matlab将nc数据读出来,写成二进制文件,然后用grads画图
  20. js 字符串转gbk 数组

热门文章

  1. 安川最小巧机器人_2020工博会,安川展品前瞻(机器人篇)
  2. STM32 HAL库 .c/.h 文件介绍
  3. 如何设置照片的高度没有滚条_基金定投选几只合适,如何设置止盈止损,有没有好的组合推荐?...
  4. ccs6 linux安装教程,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...
  5. apache httpd mysql_Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin
  6. win10 python 调用模块_python常识系列14--gt;python通过jpype模块调用jar包
  7. termcap-1.3.1的configure.in文件逐行分析
  8. linux无后缀名程序运行,linux – 如何在Ubuntu上运行无扩展(也许是ELF)文件?
  9. git 代码回滚_能提交到远程的Git回滚
  10. cesium 隐藏entity_cesium entity创建各类实体