1.Socket:Socket就是套接字。客户端与服务器之间通信用的。Socket接口是TCP/IP网络的API.

  

  2.SYN是TCP/IP建立连接时使用的握手信号。在客户端和服务器之间建立正常的TCP网络连接时,客户端首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到这个消息,最后客户端再以ACK消息响应。这样在客户端和服务器之间才能建立起可靠的TCP连接,数据才可以在客户端和服务器之间传递。

  

  3.ACK即确认字符,在数据通信中,接收站给发送站的一种传输类控制字符。表示发来的数据已确认接受无误。

  4.网络中进程之间的通信,首要解决的是如何标识一个进程,否则无从谈起!TCP/IP协议帮我们解决了这个问题,网络层的ip地址可以唯一标识网络中的主机,而传输层的协议+端口可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址、协议、端口)就可以标识网络的进程了,进程通信就利用这个标志与其他进程进行交互。TCP/IP采用编程接口是socket(套接字)。

  5.socket的基本操作:“open-write/read-close”模式

   流程:①socket()

      ②bind()

      ③listen()、connect()

      ④accept()

      ⑤read()、write()

      ⑥close()

    

  6.socket()函数

   int socket(int domain,int type,int protocol);

   socket()用于创建一个socket描述符,传入不同参数,创建不同的socket描述符。

   参数:

   domain:协议域,决定了socket的地址类型;

   type:指定socket类型;

   protocol:协议(如TCP、UDP、STCP、TIPC)

   socket()创建一个socket时,返回的socket描述子存在于协议域空间中,但是没有一个具体的地址。如果想要给它赋值一个地址,必须调用bind()函数,否则当调用connect()、listen()时系统会自动随机分配一个端口。

    

  7.bind()函数

   int bind(int sockfd,const struct sockaddr *addr,socklen_t  adddrlen);

   参数:

   sockfd:bind()就是将给这个描述字绑定一个名字;

   addr:一个const struct sockaddr*指针,指向要绑定给sockfd的协议地址。这个地址结构根据创建socket时的地址协议族的不同而不同。

  8.listen()、connect()函数

   服务器在调用socket()、bind()之后就会调用listen()来监听这个socket,客户端调用connect()发出连接请求,服务端就会接收这个请求

   int listen(int sockfd,int backlog);

   int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);

   参数:

   listen函数的第一个参数是要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是主动类型的,listen()将socket变为被动类型的,等待客户的连接请求。

   connect函数的第一个参数即为客户端的socket描述字,第二个参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用connect函数来建立与TCP服务器的连接。

  9.accept()函数

   TCP服务端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求后,就会调用accept()函数接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了。

   int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

   accept函数的第一个参数为服务器的socket描述字,第二个为指向struct sockaddr*的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度。如果accept成功,那么返回值是有内核自动生成的一个全新的描述字,代表与返回客户的TCP连接。

   注意:accept的第一个参数为服务器的socket描述字,是服务器开始调用socket()函数生成的,成为监听socket描述字;而accept函数返回的是已连接的socket描述字。一个服务器同城仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个有服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。

  10.read()、write()等函数

   服务器与客户建立好连接,就可以调用网络I/O进行读写操作了,实现网络中不同进程之间的通信!

   ①read()/write()

   ②recv()/send()

   ③readv()/writev()

   ④recvmsg()/sendmsg()

   ⑤recvfrom()/sendto()

   read函数是负责从fd读取内容,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。如果错误为eintr说明读是由中断引起的,如果是econnrest表示网络连接出了问题。

   write函数将buf中的字节内容写入文件描述符fd.成功时返回写的字节数。失败时返回-1,并设置errno变量。在网络程序中,当我们向套接字文件描述符写时有两种可能:①write返回值大于0表示写了部分或者是全部数据。②返回值小于0,此时出现了错误,错误为eintr表示在写的时候出现了中断错误。如果为epipe表示网络连接出现了问题(对方已经关闭了连接)

  11.close()函数

   int close(int fd)

   close函数操作只是使相应socket描述字的应用计数-1,只有当引用计数为0的时候,才会触发TCP客户端向服务器发送终止连接请求。

  12.socket中TCP的三次握手建立连接

   ①客户端向服务器发送一个SYN J(握手信号)

   ②服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1;

   ③客户端再向服务器发一个确认ACK K+1;

初学Socket通信的更多相关文章

  1. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  2. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  3. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  4. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  5. socket通信

    socket通信 一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程: 1:服务器监听 2:客户端发出请求 3:建立连接 4:通信 三:一个简单的例子:服务器端每隔一段时间 ...

  6. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  7. .NET开源高性能Socket通信中间件Helios介绍及演示

    一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...

  8. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  9. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

随机推荐

  1. springboo+nginx测试反向代理02

    本节对nginx配置方面会略微研究~~ 1:切换到 /opt/nginx-1.8.1/conf 目录,将nginx.conf文件拷贝到 /myprojects/nginx 目录下 2:切换到/opt/ ...

  2. centos7系统部署cobbler批量安装系统

    系统环境: 一.开启两个网卡.一个仅主机模式,一个桥接模式,主机模式对内提供cobbler服务 [root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWE ...

  3. python学习-Pillow图像处理

    Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html 安装:pip install pillo ...

  4. Chrome插件触发web页面的事件

    Chrome插件中不能直接调用Web页面的元素js,原因是chrome插件的机制http://stackoverflow.com/questions/17819344/triggering-a-cli ...

  5. 仓位管理 V4.3

    之前设计的仓位管理算法一直比较有效,往往能在市场的不断的上涨下跌中获利.不过感觉短期变动的仓位占整体的仓位较低,使得盈利较低.所以这个月对仓位管理算法进行了升级,尝试了几个版本.这里做一个记录. V4 ...

  6. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

  7. BeautifulSoup4库

    BeautifulSoup4库 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML数据.lxml只会局部遍历,而Beautif ...

  8. MyBatis sqlsession 简化 使用工具类创建

    2019-04-09 @Test public void Test() throws Exception { // 1.读取配置文件 String resource = "mybatis-c ...

  9. Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹——Jason niu

    #Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹 import urllib.request import os import random def ...

  10. CodeForces 510C Fox And Names (拓扑排序)

    <题目链接> 题目大意: 给你一些只由小写字母组成的字符串,现在按一定顺序给出这些字符串,问你怎样从重排字典序,使得这些字符串按字典序排序后的顺序如题目所给的顺序相同. 解题分析:本题想到 ...