(29)网络编程之TCP通信协议
TCP通信协议特点:
1、tcp协议是基于IO流进行数据的传输,是面向链接的。
2、tcp进行数据传输的时候,数据没有大小限制的。
3、面向链接,通过三次握手的机制,保证数据的完整性,是一个可靠的协议。
4、tcp面向连接,所以速度稍微慢一点。
5、TCP是区分客户端和服务端的。
三次握手机制:保证网络畅通
比如说,打电话,QQ\FeiQ的文件传输,迅雷下载等
TCP通信要掌握Socket相关的两个类
Socket(客户端类):一旦启动马上要与服务端进行建立连接,一般需要传参:服务器的Address和需要端口
SeverSocket(服务端类)
tcp的客户端使用步骤:
1、建立我们tcp的客户端的服务
2、获取大对应的流对象。
3、写出或读取数据
4.关闭资源
public class Demo1Client
{
public static void main(String[] args) throws IOException, IOException
{
//建立tcp的服务
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
//获取对应的输出流对象
OutputStream outputStream = socket.getOutputStream();
//利用输出流对象把数据写出即可
outputStream.write("服务端你好呀".getBytes()); //获取到一个输入流,读取服务端会送的数据
InputStream inputStream = socket.getInputStream();
int length = 0;
byte[] buf = new byte[1024];
length = inputStream.read(buf);
System.out.println("这是客户端接收到的数据:"+new String(buf, 0, length)); //关闭资源
socket.close();
}
}
SeverSocket的使用步骤
1、建立服务端的服务并且监听端口。
2、接受客户端的链接,产生一个socket。
3、获取对应的流对象,读取或写出数据。
4、关闭资源。
public class Demo1Server
{
public static void main(String[] args) throws Exception
{
//建立TCp的服务端,监听一个端口
ServerSocket serverSocket = new ServerSocket(9090);
//接受客户端的链接
Socket socket = serverSocket.accept();//aacept() 接受客户端的链接,也是一个阻塞性的方法,没有客户端与之连接时,将一直处于阻塞状态
//获取输入流对象,读取客户端发型内容
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("服务端接受到:"+new String(buf, 0, length)); Thread.sleep(600); //获取socket输出流对象,向发送端发出数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客户端你要呀,我收到了".getBytes()); //关闭资源
serverSocket.close();
}
}
还是应当先启动服务端,这个样子运行客户端的时候才能有地方链接。
示例:基于TCP的一问一答的聊天:
//聊天客户端
public class ChatSender {
public static void main(String[] args) throws IOException{
//建立tcp的客户端的服务
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
//取出socket的输出流,底层操作的是字节流,我们应当使用的是字符流 所以需要使用 输出字节流的转换流
OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream());
//获取socket的输入流的对象
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取键盘的输入流对象 一行行的读取数据
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
String line = null;
//不断的读取键盘录入的数据,并不断的把数据写出
while((line = keyReader.readLine())!=null)
{
//直接写出数据
socketOut.write(line+"\r\n"); //这里书名一下为什么要"\r\n"因为readline读取的是一行只有当讲到"\r\n"的时候才会换行
socketOut.flush(); //凡是带有字符读取的都有 缓存 有缓存的就要使用flush方法 //读取服务端回送的数据
line = socketReader.readLine();
System.out.println("服务端的数据:"+line); }
//关闭资源
socket.close();
}
}
//聊天的服务器端
public class ChatServer {
public static void main(String[] args) throws IOException{
//建立tcp的服务器端 biang监听接口
ServerSocket serverSocket = new ServerSocket(9090);
//接受客户端的客户端的链接 产生一个socket 为下面的接受数据做准备
Socket socket = serverSocket.accept();
//获取得到socket的输入流对象
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取到socket的输出流对象
OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream()); //获取建安的输入流对象
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); //读取客户端发送的数据
String line = null;
while((line = socketReader.readLine())!=null)
{
System.out.println("客户端 的数据:"+line);
System.out.println("请输入回送数据");
line = keyReader.readLine();
socketOut.write(line+"\r\n");
socketOut.flush();
}
//资源
serverSocket.close();
}
}
(29)网络编程之TCP通信协议的更多相关文章
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- java网络编程之TCP通讯
java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- Python网络编程之TCP套接字简单用法示例
Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...
- Java网络编程之TCP
Java网络编程之TCP TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...
- J2SE网络编程之 TCP与UDP
1.什么是TCP TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,位于传输层.这三个特点中,面向连接就如同打电话,双方的 ...
- Java网络编程之TCP通信
一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...
- 网络编程之tcp五层模型
网络编程 1.客户端与服务端架构:C/S B/S 架构 client <-------基于网络通信-------->server brower<-------基于网络通信--- ...
随机推荐
- 机器学习实战笔记(1)——k-近邻算法
机器学习实战笔记(1) 1. 写在前面 近来感觉机器学习,深度学习神马的是越来越火了,从AlphaGo到Master,所谓的人工智能越来越NB,而我又是一个热爱新潮事物的人,于是也来凑个热闹学习学习. ...
- Scala入门笔记二
[TOC] 标识符 可用的字符 处理括号类字符,分隔符之外,其他所有的可打印的ASCII字符,如字母,数字,下划线和美元符号($)均可出现在Scala标识符中 插入符包括了(,) [,] {,and} ...
- Spark:一个独立应用
[TOC] Spark:一个独立应用 关于构建 Java和Scala 在Java和Scala中,只需要给你的应用添加一个对于spark-core的Maven依赖. Python 在Python中,可以 ...
- [html5] 学习笔记-应用缓存与Web workers
1.应用缓存 HTML5引入了应用缓存程序,这意味着Web应用可进行缓存,并可在没有因特网连接时访问. 应用缓存的优势: 1)离线浏览--用户可在应用离线时使用它们 2)速度--已缓存是从本地加载,加 ...
- c# 应用NPOI 获取Excel中的图片,保存至本地的算法
要求:读取excel中的图片,保存到指定路径 思路: 利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...
- Applovin Interview (面经)
职位:SDE Intern positon 地点: San Jose 轮电面:self introduction what's your interest Concept of "Concu ...
- Wpf中鼠标样式的修改,作用点修改
最近,在做一个控件的鼠标样式,Ps加了插件,可以编辑生成.cur格式的图标. 可是,所有的改完以后,调试运行,结果发现自己制作的图标的作用点总是在左上角,而不是在"手形"图标的食指 ...
- 申请免费的SSL证书(Win7,PowerShell,Let's Encrypt)
随着网络安全形势的发展,SSL已是各大网站的标配,启用SSL的好处自然不必多说,然后每份SSL证书也要花费不菲的银子,按最便宜的DV证书来看,每年也要个四五百呢. 有趋势有需求,自然也有免费可用.免费 ...
- CSS3高级选择器
CSS3中添加了一些新的选择器 与之前的不同 这些选择器有些类似于jquery的选择器 能够让我们更高的操作DOM 废话不多说 为了更直观的了解 我们以这段为实例 来进行操作 <!DOCTYPE ...
- .CN根域名被攻击至瘫痪,谁之过?
2013-10-08 09:19 佚名 新浪科技 2013年8月25日凌晨,.CN域名凌晨出现大范围解析故障,经分析.CN的根域授权DNS全线故障,导致大面积.CN域名无法解析.事故造成大量以.cn和 ...