服务端:

package server;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServer {private final int port;private ClientListener mListener;public TCPServer(int port){this.port = port;}public  boolean start(){try {ClientListener listener = new ClientListener(port);mListener = listener;listener.start();}catch (IOException e){e.printStackTrace();return false;}return true;}public  void stop(){if(mListener != null){mListener.exit();}}private static class ClientListener extends Thread{private ServerSocket server;private boolean done = false;private ClientListener(int port) throws IOException {server = new ServerSocket(port);System.out.println("服务器信息:"+server.getInetAddress()+" P: "+port);}@Overridepublic void run() {super.run();System.out.println("服务器准备就绪~");//等待客户端连接do{//得到客户端Socket client;try{client = server.accept();}catch (IOException e){continue;}//客户端构建异步线程ClientHandler clientHandler = new ClientHandler(client);//启动线程clientHandler.start();}while (!done);System.out.println("服务器已关闭! ");}void exit(){done = true;try{server.close();}catch (IOException e){e.printStackTrace();}}/*** 客户端消息处理*/private static class ClientHandler extends Thread{private Socket socket;private boolean flag = true;ClientHandler(Socket socket){this.socket = socket;}@Overridepublic void run() {super.run();System.out.println("新客户端连接: "+ socket.getInetAddress()+" P:"+socket.getPort());try {//得到打印流,用于数据输出;服务器回送数据使用PrintStream socketOutput = new PrintStream(socket.getOutputStream());//得到输入流,用于接收数据BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));do{//客户端拿到一条数据String str = socketInput.readLine();if("bye".equalsIgnoreCase(str)){flag = false;//回送socketOutput.println("bye");}else {//打印到屏幕,并回送数据长度System.out.println(str);socketOutput.println("回送: "+ str.length());}}while (flag);socketInput.close();socketOutput.close();}catch (Exception e){}finally {try {socket.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("客户端已退出:" + socket.getInetAddress() +" P:" + socket.getPort());}}}
}

2.客户端:

package client;import client.bean.ServerInfo;import java.io.*;
import java.net.*;public class TCPClient {public static void linkWith(ServerInfo info) throws IOException {Socket socket = new Socket();//超时时间socket.setSoTimeout(3000);//连接传输过来的地址,端口2000,超时时间3000mssocket.connect(new InetSocketAddress(Inet4Address.getByName(info.getAddress()),info.getPort()),3000);System.out.println("已发起服务器连接,并进入后续流程~");System.out.println("客户端信息:" + socket.getLocalAddress() + " P:" + socket.getLocalPort());System.out.println("服务器信息:" + socket.getInetAddress() + " P:" + socket.getPort());try{//发送接收数据todo(socket);}catch (Exception e){}finally {socket.close();}//释放资源socket.close();System.out.println("客户端已退出~");}private static void todo(Socket client) throws IOException {//构建键盘输入流InputStream in = System.in;BufferedReader input = new BufferedReader(new InputStreamReader(in));//得到Socket输出流,并转换为打印流OutputStream outputStream = client.getOutputStream();PrintStream socketPrintStream = new PrintStream(outputStream);//得到Socket输入流,并转换为BufferedReaderInputStream inputStream = client.getInputStream();BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));boolean flag = true;do{//键盘读取一行String str = input.readLine();//发送到服务器socketPrintStream.println(str);//从服务器读取一行String echo = socketBufferedReader.readLine();if("bye".equalsIgnoreCase(echo)){flag = false;}else {System.out.println(echo);}}while (flag);//释放资源socketPrintStream.close();socketBufferedReader.close();}
}

运行结果:

客户端可以向服务端发送消息;
但是服务端不能给客户端发送信息

测试结果:

UDP点对点传输实现相关推荐

  1. 什么是点对点传输?什么是点对多传输

    点对点技术(peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上.P2P网络通常用于通过Ad Hoc ...

  2. 揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

    点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽.存储空间.计算能力.点对点传输技术有很多应用,包括共享各种格式音频.视频.数据等. 在5G重新定义带宽,信息技术 ...

  3. android 判断byte值_Android开发之UDP可靠性传输

    轩羽:Android开发之UDP​zhuanlan.zhihu.com 在这一篇文章里,小编说到UDP是不可靠的,故,我们要自己写一套协议,来使UDP实现可靠性传输,这里,小编和小编的小伙伴一起,写了 ...

  4. C++TCP和UDP属于传输层协议

    TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...

  5. 点对点传输现状,镭速高速点对点传输解决方案

    点对点传输需求日益增长,但是面对点对点传输现状和挑战,不经让人有种迫切找到高速的点对点传输解决方案,下面给大家介绍一下点对点传输的现状与挑战. 应用方面 企业存储负担过重,每日数以万计的并发请求与回复 ...

  6. Android 设备通过WIFI传输数据 - 点对点传输

    点对点传输(P2P)又是WLAN直连,他可以在没有中间接入点的情况下,通过 WLAN 进行直接互联.他有用户介入操作少,比蓝牙传输速度高等特点,对设备的要求仅仅为14,同时他又不占用wlan0网卡. ...

  7. Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一)

    前言 转载请注明出处 ,来自: 暂时两篇: (1) Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264)(一) http://blog.csdn.net/baidu_335462 ...

  8. UDP可靠性传输-QUIC

    一.QUIC协议 QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层. ...

  9. UDP可靠性传输KCP实现原理和应用

    一.为什么要做UDP可靠性传输? UDP与TCP的区别: TCP是为流量设计的(每秒可以传输多少KB的数据),因此在刚启动的时候会尽量少带宽,讲究的时候充分利用带宽. 可靠性UDP设计目的是解决:延迟 ...

最新文章

  1. python 正则表达式方法_Python正则表达式一: 基本使用方法
  2. 如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)
  3. typedef 深入剖析
  4. js获取数组中最大和最小值
  5. ZOJ 3204 Connect them 继续MST
  6. ROS笔记(36) 避障运动规划
  7. 京东:所有湖北员工按时发工资 工作岗位一直保留
  8. 一个销售精英拜访客户的6大绝招,胜过10次培训,实用!
  9. 基于文本和语音的双模态情感分析
  10. 20145335郝昊《网络攻防》Exp4 Adobe阅读器漏洞攻击
  11. HTML学习笔记——DOCTYPE和DTD,标准模式和兼容模式
  12. SpringBoot:事件的发布和监听
  13. 本地图片的预览和上传
  14. 华为olt ma5680t常用命令详解
  15. vue-echart简单使用
  16. matlab elseif语句用法,Matlab if…elseif…elseif…else…end语句
  17. PAT测试 cccc竞赛
  18. Mac下禁用开机自启软件
  19. MES系统如何实现无纸化?(下)
  20. Java 遍历HashMap并修改(remove)

热门文章

  1. linux查询当前时间
  2. (精华)2020年8月22日 ABP vNext Web应用ABP
  3. 国产CPU的6大品牌,3大路线对比
  4. Anki 2.1.24 版本更新要点
  5. 工业软件CAD、CAE、CAM介绍
  6. sudo apt-get install build-essential的作用
  7. Perl之正则表达式基础(一)
  8. 笔记本电脑外接显示器,仅显示器的时候卡顿问题的解决方案
  9. 基础数学知识(一)——拉格朗日乘子法
  10. LBP算法的一些讲解