目录结构:

contents structure [-]

TCP和UDP协议都是运行在传输层的协议,在OSI网络的七层传输模型中,如果我们把应用层、表示层、传输层统称为应用层(其实在TCP/IP模型中就是把应用层、表示层、传输层统称为应用层的),那么我们平时编写的程序就属于应用层。应用层位于传输层之上,当我们需要使用TCP/UDP协议的时候,直接调用传输层留下的TCP/UDP协议接口就可以了。在下面的示例中,我们把发送发送数据的一方称为客户端,接受数据的一方称为服务端。下面TCP和UDP的实现都采用了C#和Java代码,这个笔者还需要提一点,就是在Android中使用连接的时候,由于为了防止网速太卡,所以Android中使用TCP连接的时候,应该在一个新建的线程中进行。

1.1 TCP协议

TCP的全称是Transmission Control Protocol (传输控制协议)

  • 传输控制协议,是一种面向连接的协议,类似打电话
  • 在通信的整个过程中保持连接
  • 保证了数据传递的可靠性和有序性
  • 是一种全双工的字节流通信方式
  • 服务器压力比较大,资源消耗比较快,发送数据效率比较低
  • 点对点的传输协议

 

接下来笔者解释一下上面的几个概念:

面向连接的传输协议:面向连接,比如A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的。

可靠的传输协议:可靠的,一旦建立了连接,数据的发送一定能够到达,并且如果A说“你好吗?” B不会听到“吗你好”,这就是可靠地数据传输。

双全工的传输协议:全双工,这个理解起来也很简单,A打电话给B,B接听电话,那么A可以说话给B听,同样B也可以给A说话,不可能只允许一个人说话.。

点对点的传输协议:点对点,这个看了上面的举例相比大家都知道了,还要说一点的是,如果在A和B打电话过程中,B又来了一个紧急电话,那么B就要将与A的通话进行通话保持,所以不管怎么讲同一个连接只能是点对点的,不能一对多。

 

1.2 UDP协议

UDP是User Datagram Protocol(用户数据报协议)

  • 用户数据报协议,是一种非面向连接的协议,类似写信
  • 在通信的整个过程中不需要保持连接
  • 不保证数据传输的可靠性和有序性
  • 是一种双全工的数据报通信方式
  • 服务器压力比较小,资源比较低,发送效率比较高
  • 可以一对一、一对多、多对一、多对多

2 基于TCP的网络编程模型

2.1 使用Java代码实现TCP

服务端:

  • 创建ServerSocket的对象并且提供端口号, public ServerSocket(int port) 
  • 等待客户端的请求连接,使用accept()方法, public Socket accept()  
  • 连接成功后,使用Socket得到输入流和输入流,进行通信
  • 关闭相关资源

客户端:

  • 创建Socket类型的对象,并且提供IP地址和端口号, public Socket(String host, int port) 
  • 使用Socket构造输入流和输出流进行通信
  • 关闭相关资源

下面这个例子

 1 /*
 2  * 在提供端口号的时候应该注意:最好定义在1024~49151。
 3  */
 4 public class TestServerString {
 5 
 6     public static void main(String[] args) {
 7         try{
 8             //1.创建ServerSocket类型的对象,并提供端口号
 9             ServerSocket ss = new ServerSocket(8888);
10             //2.等待客户端的连接请求,使用accept()方法,保持阻塞状态
11             while(true){
12                 System.out.println("等待客户端的连接请求...");
13                 Socket s = ss.accept();
14                 new ServerThread(s).start();
15                 System.out.println("客户端连接成功!");
16             }
17             
18         }catch(Exception e){
19             e.printStackTrace();
20         }
21 
22     }
23 
24 }
TestServerString类

相关文章: