您的位置:首页 > 理论基础 > 计算机网络

TCP简单介绍

2017-07-02 20:26 169 查看
一:TCP简介

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议是同一层内 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元( MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

二:示例

TCP是通过socket和serversocket两个类来完成的,这两个类的具体方法在这里就不介绍了,想了解的可以查看api

服务端:

package net.TCP;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

/**

* 服务端serversocket

* @author jaques

*

*/

public class ServerTest {

public static void main(String[] args) throws IOException{

//创建对象,打开端口

ServerSocket ss=new ServerSocket(10000);

//石油accept方法获取客户端连接对象

Socket s=ss.accept();

String ip=s.getInetAddress().getHostAddress();

System.out.println(“客户端的ip:”+ip);

//Socket getInputStream获取字节输入流,读取客户端发来数据

InputStream in=s.getInputStream();

byte[] b=new byte[1024];

int len=in.read(b);

System.out.println(new String(b,0,len));

//Socket getOutputStream获取字节输出流,将数据写回客户端

OutputStream out=s.getOutputStream();

out.write(“收到”.getBytes());

//关闭

ss.close();

s.close();

in.close();

}


}
客户端

package net.TCP;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

/**

* 客户端Socket

* 1.创建Socket服务对象

* 2.Socket对象方法 getOutputStream获取字节输出流

* @author jaques

*

*/

public class SocketTest {

public static void main(String[] args) throws IOException{

//创建socket对象,参数为服务端地址和端口号

Socket s=new Socket(“127.0.0.1”,10000);

//使用Socket对象方法getOutputStream获取字节输出流

OutputStream out=s.getOutputStream();

//写入服务器

out.write(“你好TCP”.getBytes());

    //使用Socket对象方法getInputStream获取字节输入流
InputStream in=s.getInputStream();
byte[] b=new byte[1024];
int len=in.read(b);
System.out.println(new String(b,0,len));
//关闭
s.close();
out.close();
in.close();

}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: