码迷,mamicode.com
首页 > 其他好文 > 详细

初识socket

时间:2018-09-17 00:03:12      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:编程   port   snmp   cep   端口   套接字   ...   示意图   pychar   

初始socket网络编程

概念

要想理解socket,就要先来理解TCP,UDP协议。

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,

TCP/IP是TCP和IP协议的合称,TCP/IP协议是指因特网整个TCP/IP协议族。TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中

应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU

我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,我们经常把socket翻译为套接字,socket是在应用层和传输层(TCP/IP协议族通信)之间的一个抽象层,是一组接口,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

应用程序两端通过“套接字”向网络发出请求或者应答网络请求。可以把socket理解为通信的把手(hand)
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。socket的英文原义是“插槽”或“插座”,就像我们家里座机一样,如果没有网线的那个插口,电话是无法通信的。Socket是实现TCP,UDP协议的接口,便于使用TCP,UDP。

三次握手简单示意图

技术分享图片

socket通信流程

技术分享图片

python实现

服务端

# -*- coding: utf-8 -*-
# @Time : 2018/9/16 21:16
# @Author : cxa
# @File : server.py
# @Software: PyCharm
import socket

# 两个参数family type
# family地址簇:
# 服务器间的通信
# AF_INET(ipv4的参数,默认),AF_INET6(ipv6的参数)
# AF_UNIX(unix间的通信)
# type:SOCK_STREAM(TCP协议用),SOCK_DGRAM(UDP协议用)
# -------------------------------------------------------

# 创建socket对象
sk = socket.socket()
print("创建socket对象", sk)
# 绑定IP地址和端口
address = (‘127.0.0.1‘, 8000)
sk.bind(address)
# 监听,最大支持的客端端连接数。这里是3个。
sk.listen(3)
print("waiting............")

# accept阻塞,直到有客户端链接过来。
conn, addr = sk.accept()  # conn 客户端的sk对象。

# conn.send("服务端:你好".encode("utf-8")) #传输的要是字节类型
conn.send(bytes("服务端:你好", "utf-8"))
print(conn, addr)

conn.close() #终止一个socket对象
#sk.close() #关闭服务,一般使用上面的方式关闭

客户端

# -*- coding: utf-8 -*-
# @Time : 2018/9/16 22:15
# @Author : cxa
# @File : client.py
# @Software: PyCharm
import socket

# 客户端 和服务器端的sk对象没关系。
sk = socket.socket()
address = (‘127.0.0.1‘, 8000)
sk.connect(address)
data = sk.recv(1024)  # 设置最大收1024K,阻塞直到接收信息。
# info=data.decode("utf-8")
info = str(data, ‘utf-8‘)
print(info)  # 因为接收的是字节类型,所以需要转成字符串查看。

# 关闭当前通道
sk.close()

初识socket

标签:编程   port   snmp   cep   端口   套接字   ...   示意图   pychar   

原文地址:https://www.cnblogs.com/c-x-a/p/9658085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!