(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<-------基于网络通信--- ...
随机推荐
- 【python基础】 Tkinter 之 几何管理器
Tkinter支持三种几何管理器:网格管理器,包管理器,位置管理器 提示:由于每个管理器都有自己放置小构件的风格,最好不要在同一个容器中的小构件使用多个管理器.可以使用框架作为子容器以获取期望的布局. ...
- 利用终端命令实现进入ntfs分区有两种方法。
一.手动设置ubuntu自动挂载Windows分区方法:1.先用FDISK命令查看一下磁盘的UUID $sudo fdisk -l /dev/sda1 * 1 851 6835626 83 Linux ...
- 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)
在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...
- MongoDB基础之十 shared分片
水平分片实例分布图: mongodb sharding 服务器架构 1. 添加mongdb两个shared实例 # mkdir -p /home/m17 //home/m18 /home/m20 ...
- [译] 关于 Git 你需要知道的一些事情
分支和合并 Git 跟其他版本控制系统最大的优势就在于其高级的分支模型. Git 允许而且 鼓励 你在本地使用多个完全独立的分支.这些分支的创建,合并和删除几乎都可以在几秒内完成. 这意味着你可以轻松 ...
- sessionstorage,localstorage和cookie之间的区别以及各自的用法
由于年前辞了自己的工作,年后又开始重新找工作,参加了好几次面试,居然都遇到了同样的面试题:sessionstorage,localstorage和cookie之间的是区别? 当然,在面试的时候答的也不 ...
- tableView的总结
// // ViewController.m // TableViewController // // Created by 王妍 on 16/3/23. // Copyright © 2016年 c ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
- 基于 GCDAsyncSocket,简单实现类似《你猜我画》的 socket 数据传输
一.前言 Socket Socket 是对 TCP/IP 协议的封装,其中IP协议对应为网络层,TCP 协议对应为传输层,而我们常用的HTTP协议,是位于应用层,在七层模型中HTTP协议是基于 TCP ...
- nginx配合IIS实现简单负载均衡
1.IIS 部署两个站点端口分别为8081和8082 8081站点和8082站点如下[随便写了个没有样式的很丑的页面],我特意加了111和222区分 2.设置nginx配置文件,实现简单的负载 ...