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通信协议的更多相关文章

  1. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  2. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  3. 网络编程之TCP编程

    网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...

  4. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

  5. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

  6. Java网络编程之TCP

    Java网络编程之TCP ​ TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...

  7. J2SE网络编程之 TCP与UDP

    1.什么是TCP TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,位于传输层.这三个特点中,面向连接就如同打电话,双方的 ...

  8. Java网络编程之TCP通信

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...

  9. 网络编程之tcp五层模型

    网络编程 1.客户端与服务端架构:C/S   B/S  架构 client <-------基于网络通信-------->server brower<-------基于网络通信--- ...

随机推荐

  1. 吉特仓储管系统(开源)--使用Grunt压缩JS文件

    在吉特仓储管理系统开发的过程中大量使用到了JS,随着JS文件的增多我们需要对JS进行有效的管理,同时也要对JS文件进行一些压缩.文本用于记录一下使用grunt压缩JS的操作步骤,便于遗忘之后记录查找, ...

  2. volatile关键字解析(转)

    volatile关键字解析 转载:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过.在J ...

  3. VS Code C# 插件离线版 1.6.2

    VS Code C# 插件离线版,目前最新稳定版为:1.6.2 . 由于在扩展中下载C#插件总是缓慢,或者容易出现错误,特制作离线版本共享出来. 本离线版本为Windows版本,其他系统请在扩展中下载 ...

  4. Got minus one from a read call异常

    Caught: java.sql.SQLException: Io 异常: Got minus one from a read call使用JDBC连接Oracle时,多次出现上述错误,后来去网上找了 ...

  5. oracle_decode、case

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  6. GIS制图课程目录

    由于更新次序跳跃式更新,因此很有必要整理一下全书目录,并将会按照实际学习的顺序进行更新. [前言] GIS制图课程前言 [理论篇] 理论篇-地图学与GIS制图的基础理论(一) 理论篇-地图学与GIS制 ...

  7. 私有成员的设置和访问方式——set()和get()方法

    在定义类时,为了保证类中成员数据安全性及的封装性,防止成员数据值被任意修改,通常将类中成员属性用private进行修饰. 被private所修改的成员变量,只能在类中访问,跳出本类中,就无法直接访问. ...

  8. HTML5部分元素

    Document HTML4文档声明 : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu ...

  9. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  10. [bzoj1067][SCOI2007]降雨量——线段树+乱搞

    题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...