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. Vmware 中安装 Ubuntu Server (或者ubuntu 以文本界面登陆时) 分辨率无法全屏问题

    Vmware 中安装 Ubuntu Server/Ubuntu 分辨率,无法全屏问题 需要更改grub设置 在终端或者文本界面按下列步骤进行设置: 第一步: 输入命令 sudo vim /etc/de ...

  2. 在C++中反射调用.NET(一)

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ...

  3. MVC无刷新查询,PagedList分页控件使用,导出Excel

    使用MVC开发也有一段时间了,总结下无刷新部分视图的使用.PagedList分页控件的使用. @using PagedList @model StaticPagedList<T> < ...

  4. Python学习--16 正则表达式

    正则表达式是一种描述性的语言,用来匹配字符串.凡是符合规则的字符串,我们认为就是匹配了. 正则表达式并非Python独有的,它与语言无关.很多语言都支持正则表达式. 我们经常用正则表达式来匹配电子邮件 ...

  5. java 多线程之卖票两种方式

    1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...

  6. C# 总结const、 readonly、 static三者区别:

    总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...

  7. Linux下ls命令显示符号链接权限为777的探索

    Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...

  8. Linux学习之Linux目录及文件系统

    以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多 ...

  9. linux安装python3

    使用root账号 wget https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz tar -zxf Python-3.4.4.tgz cd ...

  10. Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven

    github地址,点这里. 项目效展示,点这里.账号:admin 密码:123456 下一篇文章开始,所有的项目源码都是与maven整合后的代码了,所以这一篇讲一讲maven. 1.简单介绍 我们看一 ...