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