Socket网络编程(1)

简介:

TCP/IP 简单介绍

  • 应用层 (Application):应用层是个很广泛的概念,有一些基本相同的系统级 TCP/IP 应用以及应用协议,也有许多的企业商业应用和互联网应用。
  • 传输层 (Transport):传输层包括 UDP 和 TCP,UDP 几乎不对报文进行检查,而 TCP 提供传输保证。
  • 网络层 (Network):网络层协议由一系列协议组成,包括 ICMP、IGMP、RIP、OSPF、IP(v4,v6) 等。
  • 链路层 (Link):又称为物理数据网络接口层,负责报文传输。

     

Socket相关概念

  • socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)
  • socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
  • 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。
    例如:http 使用80端口  ftp使用21端口 smtp 25端口

按端口号可分为3大类

  (1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

  (2)注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

  (3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。

  • 有两种类型:
•流式Socket(STREAM):
        是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;
•数据报式Socket(DATAGRAM):
        是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.
 

Socket的一般应用模式(服务器端和客户端)

 

1.服务端welcoming socket 开始监听端口(负责监听客户端连接信息)
2.客户端client socket连接服务端指定端口(负责接收和发送服务端消息)
3.服务端welcoming socket 监听到客户端连接,创建connection socket。(负责和客户端通信)

 

服务器端的Socket(至少需要两个)
•一个负责接收客户端连接请求(但不负责与客户端通信)
•每成功接收到一个客户端的连接便在服务端产生一个对应的负责通信的Socket
•在接收到客户端连接时创建.
•为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信).
客户端的Socket
•客户端Socket
•必须指定要连接的服务端地址和端口。
•通过创建一个Socket对象来初始化一个到服务器端的TCP连接。
 

Socket的通讯过程

 
服务器端:
•申请一个socket
•绑定到一个IP地址和一个端口上
•开启侦听,等待接授连接
客户端:
•申请一个socket
•连接服务器(指明IP地址和端口号)
服务器端接到连接请求后与客户端建立连接并进行通讯,原监听socket继续监听。
 
Socket的构造函数:
 
连接通过构造函数完成。
public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
•AddressFamily 成员指定 Socket 用来解析地址的寻址方案。例如,InterNetwork 指示当 Socket 使用一个 IP 版本 4 地址连接。
•SocketType 定义要打开的 Socket 的类型
•Socket 类使用 ProtocolType 枚举向 Windows Sockets API 通知所请求的协议
如:mySocket = new Socket(AddressFamily.InterNetwork,   SocketType.Stream, ProtocolType.Tcp);

AddressFamily.InterNetWork:使用 IP4地址

SocketType.Stream:支持可靠、双向、基于连接的字节流,而不重复数据。此类型的 Socket 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接。Stream 使用传输控制协议 (Tcp) ProtocolType 和 InterNetworkAddressFamily。

ProtocolType.Tcp:使用传输控制协议。

注意:

  1. 至少要定义一个要连接的远程主机的IP和端口号。
  2. 端口号必须在 1 和 65535之间,最好在1024以后。
  3. 要连接的远程主机必须正在监听指定端口,也就是说你无法随意连接远程主机。
  4. 如:

IPAddress addr = IPAddress.Parse("127.0.0.1");

IPEndPoint endp = new IPEndPoint(addr, 10001);

      服务端先绑定:serverWelcomeSocket.Bind(endp)

      客户端再连接:clientSocket.Connect(endp)

5.一个Socket一次只能连接一台主机。

6.Socket关闭后无法再次使用。
7.每个Socket对象只能一台远程主机连接. 如果你想连接到多台远程主机, 你必须创建多个Socket对象.
 

Socket的方法

 
  • ------------------相关类--------------------------
  • IPAddress类:包含了一个IP地址
  • IPEndPoint类:包含了一对IP地址和端口号
  • --------------------方法们------------------------------
  • Socket (): 创建一个Socket
  • Bind(): 绑定一个本地的IP和端口号(IPEndPoint)
  • Listen(): 让Socket侦听传入的连接尝试,并指定侦听队列容量
  • Connect(): 初始化与另一个Socket的连接
  • Accept(): 接收连接并返回一个新的socket
  • Send(): 输出数据到Socket
  • Receive(): 从Socket中读取数据
  • Close(): 关闭Socket (销毁连接)

Socket通信基本流程图

 

基于TCP的Socket编程(TCP service:可靠的字节流传输)

 

 

 结语

      根据之前的学习笔记,关于Socket的基础知识就介绍到这里,之后会做一个小案例,可以更好的对socket的理解。主要是项目中需要用到网络编程方面的东西,周末没事干,就将之前socket的方面的知识点复习了一下,也为了更好更快的投入工作中.....

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/3322300.html

相关文章
|
7天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
26 1
|
10天前
|
网络协议 Unix API
24.Python 网络编程:socket编程
24.Python 网络编程:socket编程
15 2
|
11天前
|
网络协议 API
网络编程套接字(2)——Socket套接字
网络编程套接字(2)——Socket套接字
8 0
|
11天前
|
XML 网络协议 Java
53. 【Android教程】Socket 网络接口
53. 【Android教程】Socket 网络接口
15 0
|
17天前
|
网络协议 Java 数据库连接
基于 Socket 网络编程
基于 Socket 网络编程
|
18天前
|
网络协议 数据格式
基于 Socket 的网络编程
基于 Socket 的网络编程
22 2
|
22天前
|
设计模式 监控 网络协议
socket通信处于网络协议那一层和两种接收发送消息方式
socket通信处于网络协议那一层和两种接收发送消息方式
23 2
|
1月前
|
Java 开发者 Spring
Java一分钟之-Java网络编程基础:Socket通信
【5月更文挑战第13天】本文介绍了Java Socket编程基础知识,包括使用`ServerSocket`和`Socket`类建立连接,通过`OutputStream`和`InputStream`进行数据传输。常见问题涉及忘记关闭Socket导致的资源泄漏、网络异常处理及并发同步。理解Socket通信原理并掌握异常处理、资源管理和并发控制,能帮助开发者构建更稳定的网络应用。
47 1
|
25天前
|
消息中间件 Java Linux
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
|
9天前
|
负载均衡 Ubuntu Linux
Linux命令探秘:bond2team与网络绑定技术
Linux的`bond2team`是网络绑定和团队技术工具,用于组合多个网络接口以提升带宽、容错性和负载均衡。通过安装`ifenslave-2.6`,在`/etc/sysconfig/network-scripts/`或`/etc/network/interfaces`配置文件中设定接口绑定模式,如`activebackup`。它支持负载均衡、容错和热备等多种工作模式,确保网络高可用性和性能。在配置前务必备份,并重启服务使配置生效。