python 之 socket 的初步认识

什么是socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,socket起源于Unix,而Unix/liunx基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read – 关闭close”模式 来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

socket 的常用方法

family(socket家族)

socket.AF_UNIX:用于本机进程间通讯,为了保证程序安全,两个独立的程序(进程)间是不能互相访问彼此的内存的,但为了实现进程间的通讯,可以通过创建一个本地的socket来完成
socket.AF_INET:(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

socket type类型

socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAW #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET

常用方法

socket.socket():建立socker套接字,两个参数,family代表家族.type代表类型,type默认TCP

socket.bind():服务器端,接受的参数是元组,不是传递host,port两个元素,而是(host,port)

socket.listen():一个参数,值为允许客户端连接服务器的排队上线,如果超过挂起上限则会拒绝掉

socket.accept():无参数,其返回值是一个元组,第一个是新的套接字对象,第二个是地址

clnt.recv(1024):参数内设置为一次接收的数据,即字节

s.send() 发送数据

socket.connect():客户端,与bind对应,接受的也是元组

s.close() 关闭套接字

socket 的通信原理图

示列演示:

服务端

import socket

# 生成一个socket 对象连接
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# bind 监听地址
server.bind((‘127.0.0.1‘, 8000))
# 启动监听
print("启动监听状态........")
server.listen(5)
# 等待连接
conn, addr = server.accept()
data = conn.recv(1024)
print("从客户端接收的数据", data)
conn.send(data.upper()) # 发送数据给客户端
conn.close()
server.close()

客户端

import socket

client = socket.socket()
client.connect(("127.0.0.1", 8000))
client.send("hello python ,i am socket".encode("utf-8"))
data = client.recv(1024)
print("从服务端接收的数据", data)
client.close()

运行顺序

运行服务端、运行客户端

服务端,显示客户端,发送的数据

客户端显示 ,服务端发送的数据

原文地址:https://www.cnblogs.com/brave1/p/9833782.html

时间: 2024-10-25 14:06:28

python 之 socket 的初步认识的相关文章

python tcp socket 多线程

不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 def main(): sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((host,port)) message = raw_input("please input whath you want to search

Python 3 socket编程

Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器,在线视频,各种社交软件. C/S架构与socket的关系: 我们学习socket就是为了c/s架构的开发 学习socket一定要先学习互联网协议: 1.如何基于socket编程,来开发一款自己的C/S架构软件 2..C/S架构的软件(软件属于应用层)是基于网络进行通信的 3.网络的核心即一堆协议,

Python 使用Socket实现FTP功能

FtpServer #!/usr/bin/env python import SocketServer class MyServer(SocketServer.BaseRequestHandler):   def setup(self):      pass   def handle(self):      path='/tmp'      while True:          print self.request,self.client_address,self.server       

python之socket模块

UDP client #!/usr/bin/env python2.7 #-*-coding:utf-8 -*- import socket s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto("hello",("localhost",8001)) data,addr = s.recvfrom(1024) print "receive data:%s from %s" % (dat

Python中socket初次尝试

算了,选择了Python就一路走下去,管对还是错,既然选择了前方,就不要顾风雨兼程,今天看了Python的socket的编程,真实遇到了各种问题,防火墙,error 10054 ,10049 ,自己就在百度上各种搜索,最终还是出来了,bug调出来的那感觉只有自己最清楚.这些都是自己socket的时候,一些笔记: 1  .netstat -no 这个命令是察看端口的,并且可以通过pid察看是哪些程序在用这些端口! 2  在Python中或其它语言中,利用Socket编写服务器和客户端通信程序,经常

python   实现socket

socket server   client 服务器端  监听 socket  IP+端口   网络通信 本地  网络 stream  tcp  dgram udp ftp服务器   传文件  传命令 socket.server  多线程-执行 python   实现socket,布布扣,bubuko.com

python之socket实现unix socket及dash字符串操作

python的socket库可以实现tcp和udp,在linux下unix socket也是可以的,有些程序在进程间通信就是使用unix socket,如果我们想查看其通信的信息来进行调试,则可以用python来伪造其接口,获取内容 参考:https://docs.python.org/2/library/socket.html import socket import os  if __name__ == '__main__':          sock = socket.socket(so

Java 和 Python 的 Socket 通信

网络上两个程序通过一个双向通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket支持的协议有多种,这里主要介绍基于 TCP/IP 协议族的 Socket 编程. 首先,IP协议族决定了socket的地址类型,在通信中必须采用对应的地址.AF_INET(AF 表示 Adress Family)表示要用 ipv4 地址(32位)与端口号(16位)的组合. 然后,根据传输协议又分为:流式 Socket(SOCK_STREAM) 和数据报式 Socket(SOCK_DGRAM):

【python】socket编程常量错误问题-1 'AF_INET'错误

1 2 3 4 5 6 7 8 9 # -*- coding: utf-8 -*- import socket print "Creating socket" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  print "Done!" print "Connecting to remote host..." s.connect(("www.baidu.com", 8