服务端:

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. android studio miui8,MIUI8上在Android Studio运行出错集及其解决方案
  2. java由goto_在java中goto的目的
  3. python有道api-python 调用有道api接口的方法
  4. 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective 精炼版
  5. linux中的改变bin级别,Linux常用命令
  6. Mat详解-OpenCV
  7. 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...
  8. 楼梯计算机公式,各种楼梯面积的计算公式汇总
  9. python中left是什么意思_Python left
  10. 了解及优化常见的Linux系统服务
  11. ubuntn 16.04 安装fabric 1.0
  12. sed-awk命令详解
  13. c++中的new_面试中常见的C语言与C++区别的问题
  14. SpringMVC框架----SpringMVC入门程序中的组件介绍
  15. 3GPP Partners
  16. VUE 学习代码 监视和 模板语法回调函数
  17. python怎么安装xlutils_Python3安装xlutils
  18. ENVI入门系列教程---一、数据预处理---7.图像镶嵌
  19. 固态硬盘排行榜,固态硬盘天梯图
  20. 基于FPGA的按键消抖

热门文章

  1. server 2008 r2 怎么打开任务管理?
  2. [TC6194]AllWoundUp
  3. 【前端面试题】原型和原型链-js
  4. SecureCRT工具介绍
  5. Java Pair类的使用
  6. MemBrain: Improving the Accuracy of PredictingTransmembrane Helices
  7. java中public,private,protect,default区别
  8. 单线激光雷达Windows测试备忘
  9. vue之push() pop() shift() unshift() splice() sort() reverse()等等
  10. 链新:区块链大赛火热,成为技术与创意的练兵场