套接字(socket)基本知识与工作原理

套接字(socket)基本知识与工作原理

一、Socket相关概念

    Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)

    SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking).客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。

 

二、Socket有两种类型:

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

三、Socket一般应用模式(服务端和客户端)


 

服务端的Socket(至少需要两个):

  • 一个负责接受客户端连接请求(但不负责与客户端通信)
  • 每成功接收到一个客户端的连接便在服务端产生一个对应的Socket
    • 再接受到客户端连接时创建。
    • 为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信)。

客户端的Socket

  • 客户端Socket
    • 必须指定要连接的服务端地址和端口。
    • 通过创建一个Socket对象来初始化一个到服务端的TCP连接。

 

Socket通信基本流程图


 

 

Socket的通信过程

服务端:

  • 申请一个Socket
  • 绑定到一个IP地址和一个端口
  • 开启侦听,等待接受连接

客户端:

  • 申请一个Socket
  • 连接服务器(指明IP地址和端口号)

    服务器端接到连接请求后,产生一个新的Socket(端口大于1024)与客户端建立连接并进行通讯,原侦听Socket继续侦听。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 多线程--重点知识

1.全局变量global的用法 2.多线程共享全局变量-args参数 注意args参数类型为元组,逗号不能少!

Flask WTForm表单的使用

运行环境: python2.7 flask 0.11 flask-wtf 0.14.2 wtform能够通过一个类定义一些字段,这些字段会在前端生成标签,并且通过设置字段的验证规则,自动判断前端输入数据的格式。 一般用于用户登录,用户注册等信息录入。…

Java与C#个人之比较

网上这方面的比较文章已经有不少了,不过大都是要么从很高的角度说的,要么就是从底层说的,本人就以自己这几年的编程经历中的感受,来谈谈自己的体会。 相似性: Java和C#都是一门面向对象的语言,Java更多地…

java利用子类求正方形_Java程序设计实验2011

(2)掌握对象的声明和使用;(3)掌握构造方法的概念和使用;(4)掌握类及成员的访问控制符。2、实验任务(1)阅读下面的程序,在main()方法里添加语句完成如下的功能:①创建一个MyV alue类的对象myV alue。②为myV alue对象中的value域赋…

当导用模块与包的import与from的问题(模块与包的调用)

当在views.py里写impor models会不会报错呢? 1、Python里面的py文件都是每一行的代码。2、Python解释器去找一个模块的时候,只去sys.path的路径里找3、django项目启动(django项目的启动文件是manage.py)启动项目是将manage.py的路…

ack和seq

ACK (Acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。 seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认&#xff…

MySQL中的information_schema

0.引言 近日在学习网络安全的sql注入时,用到mysql中的information_schema数据库,其思路是利用information_schema中的SCHEMA获取数据库中的table名称。现在对相关数据库进行总结,方便以后复习使用。 2.information_schema数据库 informati…

linux配置防火墙,开启端口

linux配置防火墙,开启端口 Centos7,配置防火墙,开启端口  1.查看已开放的端口(默认不开放任何端口)    firewall-cmd --list-ports  2.开启80端口    firewall-cmd --zonepublic(作用域) --add-port80/tcp(端口和访问类型) --permanent(永久…

使用Intel编译器系列合集

好的帖子:http://topic.csdn.net/u/20080327/16/071b45df-3795-4bf1-9c4d-da4eb5aaa739.html参考手册:http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm 说明:本系列文章为个…

【前端】这可能是你看过最全的css居中解决方案了~

1.水平居中&#xff1a;行内元素解决方案 适用元素&#xff1a;文字&#xff0c;链接&#xff0c;及其其它inline或者inline-*类型元素&#xff08;inline-block&#xff0c;inline-table&#xff0c;inline-flex&#xff09; html部分代码:<div>文字元素</div><…

java手机一款三国游戏_JAVA热游—富甲三国之雄霸天下原创心得

因为工作忙碌的关系&#xff0c;很长时间都没有来关注手机游戏论坛&#xff0c;这款富甲三国.雄霸天下&#xff0c;我也是前天才拿到手。游戏比想象中的简单&#xff0c;个人仅用了两个小时时间&#xff0c;就将三个人物全部通关。游戏的开始画面制作得比较精美&#xff0c;而且…

Python多线程--互斥锁、死锁

1、互斥锁 为解决资源抢夺问题&#xff0c;使用mutex Threading.Lock()创建锁&#xff0c;使用mutex.acquire()锁定&#xff0c;使用mutex.release()释放锁。 代码一&#xff1a; import threading import time# 定义一个全局变量 g_num 0def test1(num):global g_num# 上锁…

freemind 要下载java_Freemind

动手编辑先按Ctrln&#xff0c;新建一个文件。这时出现了一个根节点。用光标单击它&#xff0c;改成“我学FreeMind”&#xff0c;然后在节点之外任一地方点击鼠标(或按Enter)完成编辑。然后&#xff0c;按Insert键&#xff0c;输入“下载安装”&#xff0c;按Enter键&#xff…

本地连不上远程mysql数据库(2)

Host is not allowed to connect to this MySQL server解决方法 今天在ubuntu上面装完MySQL&#xff0c;却发现在本地登录可以&#xff0c;但是远程登录却报错Host is not allowed to connect to this MySQL server,找了半天试了网上的一些方法都没有解决&#xff0c;最终在一篇…

理解EnterCriticalSection 临界区

通俗解释就像上厕所&#xff1a; 门锁了&#xff0c;就等着&#xff0c;等到别人出来了&#xff0c;进去锁上&#xff0c;然后该干什么干什么&#xff0c;干完了&#xff0c;把门打开 门没锁&#xff0c;就进去&#xff0c;锁上&#xff0c;然后该干什么干什么&#xff0c;干…

Python多线程--UDP聊天器

import socket import threadingdef recv_msg(udp_socket):"""接收数据并显示"""# 接收数据while True:recv_data udp_socket.recvfrom(1024)print(recv_data)def send_msg(udp_socket, dest_ip, dest_port):"""发送数据"&…

mvc:default-servlet-handler/作用

<mvc:default-servlet-handler/>使用默认的servlet来相应静态文件&#xff0c;因为在web.xml中使用了DispatcherServlet截获所有的请求url&#xff0c;而引入<scprit type"text/javascript" src"js/jquery-1.11.0.mim.js"/>的时候&#xff0c;…

java中如何做模糊查询_到底Java里的模糊查询语句该怎么写

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼现在String sql"select * from car where carName like %?%";可以查询出结果了&#xff0c;但问题又来了&#xff0c;只能查询出一条结果&#xff0c;代码如下carDao.java页面public ArrayList queryAppoint(String car…

vector 、map 、iterator 之学习笔记

由于本人要接手一项C方面 的工作。由于不会C,不过做过JAVA 以及一些web方面的开发&#xff0c;加之时间比较短。所以需要速成&#xff0c;于是学习笔记也基本都是用代码代替。 //范例资源文件 /****************************************************************************…