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. Array数组常用的5个方法

    es6 时代来临了,不知道es5 你熟知了吗? 在此介绍一个我常用到的5个方法,万恶的ie9一下并不支持,需要做兼容慎用 indexOf indexOf()方法返回在该数组中第一个找到的元素位置,如果 ...

  2. 腾讯优图及知脸(ZKface)人脸比对接口测试(python)

    一.腾讯优图 1.开发者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID.S ...

  3. Linux驱动技术(七) _内核定时器与延迟工作

    内核定时器 软件上的定时器最终要依靠硬件时钟来实现,简单的说,内核会在时钟中断发生后检测各个注册到内核的定时器是否到期,如果到期,就回调相应的注册函数,将其作为中断底半部来执行.实际上,时钟中断处理程 ...

  4. Swift 学习有用的学习链接(此贴随学习的深入会一直更新)

    Swift 字符串相关学习推荐下面这个链接内容 一:  http://www.jianshu.com/p/52e7580166ff (里面详细的介绍了2.0 和 2.0之前 的版本的一些不同的处) 二 ...

  5. IP查询接口

    腾讯的: http://fw.qq.com/ipaddress直接返回本机的IP地址对应的地区新浪的:http://counter.sina.com.cn/ip?ip=IP地址返回Js数据,感觉不是很 ...

  6. php微信网页授权获取用户信息

    配置回调域名: 1. 引导用户进入授权页面同意授权,获取code 2. 通过code换取网页授权access_token(与基础支持中的access_token不同) 3. 如果需要,开发者可以刷新网 ...

  7. C++用new创建对象和不用new创建对象的区别解析

    在C++用new创建对象和不用new创建对象是有区别的,不知你是否清楚的了解它们到底有什么样的区别呢?下面小编就用示例来告诉大家吧,需要的朋友可以过来参考下   我们都知道C++中有三种创建对象的方法 ...

  8. css特殊字符编码

  9. 酷派8702手机打开logcat

    机器在出厂时将log的级别做了限制,方法是:拨号盘输入*20121220# -> 选择日志输出级别 -> 选择Java log level -> 选择LOGD即可.

  10. web开发之Servlet 一

    因为最近在研究公司一套新的框架,发现这套框架的底层是对Struts2,Spring 封装后的WEB应用框架,而我发现如果仅仅是利用这个框架开发,确实很容易快速上手,做业务来说是没有问题的,但我觉得如果 ...