基于测试驱动的Socket入门实例(代码的具体功能可以看我的程序中的注释,不理解的可以短信我)

先看Server的代码:

package socketStudy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.log4j.Logger;/*** 类ServerSocket.java的实现描述:*/
public class Server {private static final Logger log  = Logger.getLogger("actionLog");private ServerSocket        server;private List<String> list = new ArrayList<String>();public Server(int port) throws IOException{server = new ServerSocket(port);}/*** 启动server的监听程序,当server关闭的时候停止监听* * @throws IOException*/public void listen() throws IOException {Socket client;String temp;BufferedReader br = null;//如果当前server已经手动关闭,则终止监听while (!server.isClosed()) {// 每当检测到套接字,就获得一个socket链接// 这个方法在连接传入之前,一直阻塞client = server.accept();//注意这里只需要获取一次client的输入流即可br = new BufferedReader(new InputStreamReader(client.getInputStream()));temp = br.readLine();while (temp != null) {list.add(temp);temp = br.readLine();}//这里立即关闭了client,事实上可以建立个timeOut时间if(client.isClosed()){client.close();}br.close();}}/*** 每次都返回当前的套接字的传入内容<br/>* 在返回后清空当前的list* * @return List<String>*/public synchronized List<String> getList() {List<String> newArrayList=new ArrayList<String>(Arrays.asList(new String[list.size()]));Collections.copy(newArrayList, list);list.clear();return newArrayList;}/*** 返回当前server是否成功绑定上指定接口<br/>* true表示成功绑定,false则表示没有绑定* * @return boolean */public boolean isBound() {return server.isBound();}/*** 关闭当前server*/public void close() {if (server != null) {try {server.close();} catch (IOException e) {log.error(e.getMessage(), e);}}}@Overridepublic String toString() {return this.server.toString();}}

再看client的程序示例;

package socketStudy;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;import org.apache.log4j.Logger;/*** 类Client.java的实现描述:*/
public class Client {private static final Logger log = Logger.getLogger("actionLog");private Socket              client;private PrintWriter         out;public Client(String serverIp, int port) throws UnknownHostException, IOException{client = new Socket(serverIp, port);out = new PrintWriter(client.getOutputStream(), true);}/*** 向server发送消息* * @param message*/public void send(String message) {out.println(message);}/*** 关闭当前client*/public void close() {if (client != null) {try {client.close();} catch (IOException e) {log.error(e.getMessage(), e);}}if (out != null) {out.close();}}
}

最后看我们的测试代码(基于testng)

package test;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;import org.testng.Assert;
import org.testng.annotations.Test;
import socketStudy.Client;
import socketStudy.Server;/*** 类TestSocket.java的实现描述:*/
public class TestSocket {private Server server;private static final int port=8733;@SuppressWarnings("static-access")@Testpublic void testSocket() throws IOException,InterruptedException{//这里需要单独起个线程来在client发送消息前启动server的监听程序Thread serverThread=new Thread() {@Overridepublic void run() {try{server = new Server(port);server.listen();}catch(IOException e){throw new RuntimeException(e);}                                }            };serverThread.start();//这里通过线程不断的睡眠来等待server的监听程序启动成功while(true){if(server==null||!server.isBound()){Thread.currentThread().sleep(1000);}else{break;}}        Client client = new Client("127.0.0.1", port);client.send("test");client.send("joking");client.close();server.close();//获取当前client发送的消息List<String> actualList = server.getList();List<String> expectedList = Arrays.asList("test", "joking");Assert.assertEquals(actualList, expectedList);}
}

转载于:https://www.cnblogs.com/bestchenwu/archive/2012/05/06/9655385.html

Java Socket入门实例相关推荐

  1. java rmi 入门实例

    java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础  java rmi即java远程接口调用,实现了2台虚拟机之间的 ...

  2. JAVA socket编程实例 转载

    事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了.Java SDK提供一些相对简单的Api来完成这些工作.Socket ...

  3. JAVA socket编程实例

    2019独角兽企业重金招聘Python工程师标准>>> 事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的 ...

  4. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...

  5. tcp java实例_实现了基于TCP的Java Socket编程实例代码

    实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...

  6. Java UDP 入门实例

    读写分开,实现全双工通信 Peer1类,监听5000端口,接收传过来的 消息并显示在控制台中.localhost的5001端 口持续发送"world" 消息. Peer2类, 监听 ...

  7. axis2 webservice入门学识(JS,Java,PHP调用实例源码)

    来源:http://www.myexception.cn/web/952419.html axis2 webservice入门知识(JS,Java,PHP调用实例源码) 背景简介 最近接触到一个银行接 ...

  8. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  9. Java 网络实例三(获取URL响应头的日期信息、获取URL响应头信息、解析URL、ServerSocket和Socket通信实例)

    获取 URL响应头的日期信息 以下实例演示了如何使用 HttpURLConnection 的 httpCon.getDate() 方法来获取 URL响应头的日期信息: import java.net. ...

最新文章

  1. 中国人工智能源头创新的突破点在哪里?创投圈这么看
  2. HDFS块文件和存放目录的关系
  3. Redis:redis cluster的实现细节
  4. VS 中配置使用Visual SVN系列 三:TortoiseSVN Client(客户端)下载和安装
  5. 即时通讯音视频开发(一):视频编解码之理论概述
  6. QML Camera 摄像头拍照(带滑动条设置焦距)
  7. go语言 echo框架_如何在Go Echo Web框架中设置嵌套HTML模板
  8. pt-heartbeat 监测RDS延迟
  9. Vue.js项目中,当图片无法显示时则显示默认图片
  10. java hibernate状态_Hibernate对象的三种状态
  11. 操作 神通数据库_国产神通数据库操作备忘(Linux)
  12. 计算机开机按f1,电脑开机按F1的原因及解决方法
  13. 太原工业学院计算机实训中心,法学实训实验中心
  14. RISCV ISS Spike 介绍
  15. Servlet学习之Servlet概念与运行流程
  16. codechef EBAIT Election Bait【欧几里得算法】
  17. Spring Boot文件下载断点续传
  18. 强化学习(一)-->隐马尔科夫模型HMM-->HMM模型基础
  19. 【开源】电子围栏-测距离-测面积-拉框放大-实时路况-逆地理编码的实现
  20. 电子病历结构化之实体识别(附完整项目代码)

热门文章

  1. springboot启动出错,
  2. Linux分区、LVM等简述
  3. 2. Add Two Numbers(Leetcode)
  4. python socket coding
  5. linux中配置DHCP基本操作
  6. Ionic - 先进的 HTML5 移动开发框架和 SDK
  7. 关于 Delphi 中流的使用(10): 压缩与解压缩进度 - 回复 ilst 的问题
  8. Python print函数用法,print 格式化输出
  9. 如何让网站被百度谷歌快速收录
  10. 1209F - Koala and Notebook