zoukankan      html  css  js  c++  java
  • soket编程

    一。为什么要使用soket编程

    进程之间通信的前提是需要能够唯一的标识一个进程。在本地通信可以使用PID唯一的标识一个进程。在网络中两个进程的冲突几率很大。

    不过,网络层的ip地址可以唯一的标识一台主机,传输层的协议和端口号可以唯一的标识一台主机上的一个进程。

    因此,ip地址+协议+端口号 就可以唯一的标识网络中的一个进程了。

    唯一的标识一个进程之后,就可以利用soket通信了,soket被翻译成套接字,是应用层和传输层之间的一个抽象层。把一些TCP/IP的复杂的操作抽象为接口来实现网络中的通信。

    二。soket的通信流程

    socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现。客户端和服务器端各自维护一个“”文件“。

    建立连接之后,可以读取对方的内容或者向自己的文件中写入内容供对方读取。

    具体流程如下:

    1.socket():根据IP地址的类型(ipv6或者iPv4),socket的类型,传输层的协议类型(TCP or UDP等)创建socket,但值得注意的是,此时该socket并没有一个具体的地址。

    2.bind():给刚才已经创建好的socket赋值一个众所周知的具体的地址,(ip地址+端口号)。

    注意:客户端和服务器端不同的是,服务器端是需要提前指定一个具体的地址的,而客户端就不会指定,是在connect()的时候自动由系统随机生成的一个

    3.listen():在创建完socket(),bind()之后,就会调用listen()监听这个端口,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。

    4。服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。

    5。在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。

  • 相关阅读:
    [Linux] Chmod 改变权限
    [linux命令]基本命令
    [Linux命令] 查看目录大小du
    [Linux命令]格式化mkfs
    在VMWare下的Linux切换
    .net的MSMQ异步调用
    CASSINI源代码分析
    [Wix] RadioButton与ListItem的属性要改掉了
    如何快速生成Insert数据插入语句?
    撕纸
  • 原文地址:https://www.cnblogs.com/lyr2015/p/7436112.html
Copyright © 2011-2022 走看看