通过对第一个例子的学习,已经对Socket有了一个比较清晰的认识。

不过第一个例子有一个问题,就是只能有一个客户端调用,下面我们把第一个例子的代码做一个改进,改成多客户端调用的。

Java服务端代码Test2.java:

package com.ruiri.app;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.List;

import org.eclipse.swt.widgets.Shell;

public class Test2 {

private List list;

protected Shell shell;

private ServerSocket server;

private Socket socket;

/**

* Launch the application

*

* @param args

*/

public static void main(String[] args) {

try {

Test2 window = new Test2();

window.open();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* Open the window

*/

public void open() {

final Display display = Display.getDefault();

createContents();

shell.open();

shell.layout();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

}

/**

* Create contents of the window

*/

protected void createContents() {

shell = new Shell();

shell.setSize(286, 375);

shell.setText("socket服务器");

final Button button = new Button(shell, SWT.NONE);

button.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(final SelectionEvent e) {

Runnable runnable = new Runnable() {

public void run() {

try {

server = new ServerSocket(719);

Display.getDefault().asyncExec(new Runnable() {

public void run() {

list.add("服务器等待");

}

});

while (true) {

socket = server.accept();

Display.getDefault().asyncExec(new Runnable() {

public void run() {

list.add("已与客户机连接");

}

});

SocketThread thread = new SocketThread(socket,list);

thread.start();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (server != null) {

try {

if (!server.isClosed()) {

server.close();

Display.getDefault().asyncExec(

new Runnable() {

public void run() {

list.add("服务器断开");

}

});

}

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

}

};

Thread thread = new Thread(runnable);

thread.start();

}

});

button.setText("开启socket");

button.setBounds(42, 316, 72, 22);

list = new List(shell, SWT.V_SCROLL | SWT.BORDER | SWT.H_SCROLL);

list.setBounds(26, 10, 217, 300);

final Button button_1 = new Button(shell, SWT.NONE);

button_1.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(final SelectionEvent e) {

try {

if (server != null) {

server.close();

server = null;

}

Display.getDefault().asyncExec(new Runnable() {

public void run() {

list.add("服务器断开");

}

});

} catch (IOException e1) {

e1.printStackTrace();

}

}

});

button_1.setText("关闭socket");

button_1.setBounds(154, 316, 72, 22);

//

}

}

SocketThread.java

package com.ruiri.app;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.Socket;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.List;

public class SocketThread extends Thread {

public Socket socket;

public List list = null;

private BufferedReader reader;

private String str = "";

public SocketThread(Socket socket,final List list)

{

this.socket = socket;

this.list = list;

}

public void run()

{

try {

reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));

while(true)

{

str = reader.readLine();

if(str==null) break;

Display.getDefault().asyncExec(new Runnable() {

public void run() {

list.add(str);

}

});

}

} catch (Exception e) {

e.printStackTrace();

}

finally{

try {

if(reader!=null) reader.close();

if(socket!=null) socket.close();

} catch (IOException e) {

e.printStackTrace();

}

Display.getDefault().asyncExec(new Runnable() {

public void run() {

list.add("已与客户机断开");

}

});

}

}

}

Flex的代码不用改,到此就可以使用多客户端同时连接响应了

flex socket java_使用Java编写Socket服务器,并且与Flex通信(二)相关推荐

  1. java编写socket使用bufferedReader.readLine()问题研究

    不写java代码好久,临时写个socket通讯竟然失败,郁闷之下仔细研究了下. 客户端使用BufferedReader来读取数据,在while中调用BufferedReader.readLine()函 ...

  2. 通过Java编写一个服务器理解动态Web,静态Web

    静态Web 说到Servlet自然就要说到Web,Web分为静态Web和动态Web,之前我一直都傻傻分不清两者的区别,直到用JAVA编写了一个服务器后才明白二者的区别,所谓静态Web,实际上就是指,客 ...

  3. java socket 消息中转,Java中Socket实现消息传输(传输原型)

    项目已经做的差不多了,其中做了一个消息的转发功能,所以自己也写一个简单的例子看看 先一步步的来吧,先写好一个Socket的消息传输的原型来,再一步步的改进吧. 其实在这个基础上要中的东西还是很多的 1 ...

  4. 24点游戏java_使用java编写计算24点游戏程序

    初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用. //-------------Cal24.java--------------- //计算24点程序 //作者:徒步天下( ...

  5. 停车场管理系统 java_使用java编写一个停车场管理系统

    使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...

  6. 直角三角形面积Java_用java编写输出直角三角型、倒直角三角形

    /** * 题目:用java编写输出直角三角型.倒直角三角形 * 作者:郑翰林 * 时间:2019.8.7 */ /** * * * *** * ***** * ******* * ********* ...

  7. byfen网java_用java编写程序根据考试成绩的等级打印出百分制分数段

    用java编写程序,根据考试成绩的等级打印出百分制分数段:设A为90分以上,B为80分以上,C为70分以上,D为60分以上,E为59分以下.要求在程序中使用开关语句.上级运行其结果是否符合设计要求: ...

  8. 整数数组查找java_使用Java编写程序以查找整数数组中的第一个非重复数字?

    查找数组中的第一个非重复数字-构造count数组以将给定数组中每个元素的计数存储为相同长度,且所有元素的初始值为0. 将数组中的每个元素与除自身之外的所有其他元素进行比较. 如果匹配发生,则增加其在计 ...

  9. for相关 java_用java编写一个程序,求2到100之间的偶数和(使用for循环)

    public static void main(String[] args) {int sum ... public class Test { public static void main(Str. ...

最新文章

  1. SQL注入 1-3_基于post报错注入
  2. 关于站库分离渗透思考总结
  3. Pytorch RNN(详解RNN+torch.nn.RNN()实现)
  4. 转载---安装mysql5.7,遇到的问题
  5. 行存储索引改换成列存储索引_如何使用列存储索引来改善数据仓库登台环境
  6. ASP生成静态页面的方法
  7. Test SRM Level Two: CountExpressions, Brute Force
  8. 10. Javascript DOM节点
  9. android 投屏技术原理,什么是无线投屏技术,无线投屏技术原理解析
  10. Wireshark 用户使用手册 ———— 文件处理
  11. PLC控制系统设计与调试的一般步骤
  12. Web前端满屋花案例框架
  13. 嵌入式开发之 STM32自行车码表(图文)
  14. 「产品读书」增长黑客:创业公司的用户与收入增长秘籍
  15. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: Shared Memory Provider, error: 0-管道的另一端上无任何进程
  16. pcb规则中英文对照
  17. Dell电脑 U盘启动盘 安装ubuntu
  18. A Survey on Deep Learning in Medical Image Analysis
  19. 一些俗语,不思八九,常想一二
  20. mysql show master status为空值

热门文章

  1. RHEL6基础之一系统内核Kernel与GNU计划及Linux发行版本
  2. web.xml 详细介绍
  3. Java Architecture [JAVA的架构]
  4. 李开复:一生换四五次工作在21世纪很正常
  5. matlab训练cifar10,认识CIFAR-10数据集
  6. Linux常用命令之yum
  7. python函数的四个特点_Python面向对象三大特征之封
  8. Python零基础入门(零)——Anaconda安装(python安装)和使用
  9. 剑指offer面试题[26]-复杂链表的复制
  10. 思路不清晰还想月薪过万?学会这4招,升职加薪有望