UDP点对点传输实现
服务端:
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点对点传输实现相关推荐
- 什么是点对点传输?什么是点对多传输
点对点技术(peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上.P2P网络通常用于通过Ad Hoc ...
- 揭秘镭速传输点对点传输技术,NAT+Raysync强强组合
点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽.存储空间.计算能力.点对点传输技术有很多应用,包括共享各种格式音频.视频.数据等. 在5G重新定义带宽,信息技术 ...
- android 判断byte值_Android开发之UDP可靠性传输
轩羽:Android开发之UDPzhuanlan.zhihu.com 在这一篇文章里,小编说到UDP是不可靠的,故,我们要自己写一套协议,来使UDP实现可靠性传输,这里,小编和小编的小伙伴一起,写了 ...
- C++TCP和UDP属于传输层协议
TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...
- 点对点传输现状,镭速高速点对点传输解决方案
点对点传输需求日益增长,但是面对点对点传输现状和挑战,不经让人有种迫切找到高速的点对点传输解决方案,下面给大家介绍一下点对点传输的现状与挑战. 应用方面 企业存储负担过重,每日数以万计的并发请求与回复 ...
- Android 设备通过WIFI传输数据 - 点对点传输
点对点传输(P2P)又是WLAN直连,他可以在没有中间接入点的情况下,通过 WLAN 进行直接互联.他有用户介入操作少,比蓝牙传输速度高等特点,对设备的要求仅仅为14,同时他又不占用wlan0网卡. ...
- Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一)
前言 转载请注明出处 ,来自: 暂时两篇: (1) Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264)(一) http://blog.csdn.net/baidu_335462 ...
- UDP可靠性传输-QUIC
一.QUIC协议 QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层. ...
- UDP可靠性传输KCP实现原理和应用
一.为什么要做UDP可靠性传输? UDP与TCP的区别: TCP是为流量设计的(每秒可以传输多少KB的数据),因此在刚启动的时候会尽量少带宽,讲究的时候充分利用带宽. 可靠性UDP设计目的是解决:延迟 ...
最新文章
- android studio miui8,MIUI8上在Android Studio运行出错集及其解决方案
- java由goto_在java中goto的目的
- python有道api-python 调用有道api接口的方法
- 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective 精炼版
- linux中的改变bin级别,Linux常用命令
- Mat详解-OpenCV
- 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...
- 楼梯计算机公式,各种楼梯面积的计算公式汇总
- python中left是什么意思_Python left
- 了解及优化常见的Linux系统服务
- ubuntn 16.04 安装fabric 1.0
- sed-awk命令详解
- c++中的new_面试中常见的C语言与C++区别的问题
- SpringMVC框架----SpringMVC入门程序中的组件介绍
- 3GPP Partners
- VUE 学习代码 监视和 模板语法回调函数
- python怎么安装xlutils_Python3安装xlutils
- ENVI入门系列教程---一、数据预处理---7.图像镶嵌
- 固态硬盘排行榜,固态硬盘天梯图
- 基于FPGA的按键消抖
热门文章
- server 2008 r2 怎么打开任务管理?
- [TC6194]AllWoundUp
- 【前端面试题】原型和原型链-js
- SecureCRT工具介绍
- Java Pair类的使用
- MemBrain: Improving the Accuracy of PredictingTransmembrane Helices
- java中public,private,protect,default区别
- 单线激光雷达Windows测试备忘
- vue之push() pop() shift() unshift() splice() sort() reverse()等等
- 链新:区块链大赛火热,成为技术与创意的练兵场