socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。

网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,应用程序通过socket向网络中发出消息,或者接收消息。

socket是应用层与TCP/IP协议族的中间抽象层,它是一组接口,把复杂的TCP/IP协议族封装为几个简单的接口提供给应用层调用,实现程序在网络中的通信

socket仅仅是一个调用接口,为了方便程序员针对TCP或者UDP编程的接口。

socket的七个方法

  服务端套接字绑定IP端口:bind()

  客户端套接字连接服务器:connect()

  服务端套接字监听:listen()

  套接字发送消息:send()

  服务端监听套接字同意连接:accept()

  套接字接受消息:recv()

  套接字关闭连接:close()

创建socket

 导入socket模块: import socket

 创建socket对象:socket.socket()

基本使用

注意: 服务端是通过accept生成的对等连接套接字来和客户端通信的

注意: aeecpt和recv是会阻塞的,当没有数据来的时候阻塞等数据过来

xshell 中命令执行

代码执行:

写一个不断接受(while True)用户连接的服务端,它的作用是把客户端发来的数据原封不动的返回。

#服务端Linux\window系统下:处理命令并返回
import socket #声明类型,生成socket链接对象
server = socket.socket() #监听接收端口元组(本地,端口),绑定要监听的端口
server.bind(('127.0.0.1', 8888)) #1.监听
#2.“5”最大监听数,允许多少人在排队
server.listen(5) print("执行到这, 上面没问题了") #循环锁定访问客户端
while True: #1.等待客户端 #会返回链接的标记位conn,与连接的地址
#2.客户端同过conn,addr进行通话
#3.conn就是客户端连接过来而在服务器端为其生成的一个连接实例
conn, addr = server.accept() #查看标记位与IP地址
print(conn, addr) #循环处理客户端请求
while True: #1.接收数据,1024字节
#2.如果发不完会存在缓冲去,下次在发送。
#3.缓冲区每次最多发32768字节
#4.每个系统不同,超出数值会有限制。
data = conn.recv(1024) #返回
print(data) #判断是否为空。
if not data:
break #输入一个值,与客户端通讯
aa = input("--->>:") #解决报错:TypeError: a bytes-like object is required, not 'str'
bb = aa.encode() # 传输
conn.send(bb) #关闭链接
server.close()

写一个客户端来测试上面的服务端

#客户端Linux、window系统下:输入命令通过服务端返回
import socket #声明协议类型,同时生成socket连接对象
client = socket.socket() #链接地址和端口,元组(本地,端口)
client.connect(('127.0.0.1', 8888)) #使用input循环向服务端发送请求
while True: msg = input("-->>:").strip()
if len(msg) == 0:
continue #发送数据 b将字符串转为bys类型
client.send(msg.encode("utf-8")) #接收服务器端的返回,需要声明收多少,默认1024字节
id = 1024
data = client.recv(id) #打印data是recv的data
print("recv: %s" % data) #关闭接口
client.close()

作者:含笑半步颠√

博客链接:https://www.cnblogs.com/lixy-88428977

声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。

python_socket (套接字)的更多相关文章

  1. Linux Socket 原始套接字编程

    对于linux网络编程来说,可以简单的分为标准套接字编程和原始套接字编程,标准套接字主要就是应用层数据的传输,原始套接字则是可以获得不止是应用层的其他层不同协议的数据.与标准套接字相区别的主要是要开发 ...

  2. c 网络与套接字socket

    我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...

  3. WebSocket异常 通常每个套接字地址(协议/网络地址/端口)只允许使用一次

    websocket的实例:http://blog.csdn.net/for_cxc/article/details/51500185 问题: 新建一个连接通信没有问题,但是如果关闭再建立就会报错:通常 ...

  4. Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)

    我们常常在执行 httpd –k restart 重启Apache时报错提示: (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次.  : AH00072: make_soc ...

  5. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  6. 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket

    这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...

  7. Python黑帽编程2.8 套接字编程

    Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...

  8. 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  9. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

随机推荐

  1. 洛谷1169 [ZJOI2007] 棋盘制作

    题目链接 题意概述:给出由0 1构成的矩阵,求没有0 1 相邻的最大子矩阵的最大子正方形. 解题思路:设f[i][j]表示i j向上能到哪,l[i][j] r[i][j]表示向左/右,转移时分开计算矩 ...

  2. 洛谷P1084 疫情控制

    题目 细节比较多的二分+跟LCA倍增差不多的思想 首先有这样一个贪心思路,深度越低的检查点越好,而最长时间和深度具有单调性,即给定时间越长,每个军队能向更浅的地方放置检查点.因此可以考虑二分时间,然后 ...

  3. IIS服务器部署web应用《一》

    最近了解到开发用iis部署环境,于是了解了下. IIS用于部署web应用,其简单,配置方便,可以用作本地机器作为服务器进行部署.且所在部署系统为windows,便于使用iis. 端口80需要修改为别的 ...

  4. 分布式id的生成方式——雪花算法

    雪花算法是twitter开源的一个算法. 由64位0或1组成,其中41位是时间戳,10位工作机器id,12位序列号,该类通过方法nextID()实现id的生成,用Long数据类型去存储. 我们使用id ...

  5. Java事务以及嵌套事务

    知识点:java事务属性 Propagation取值: REQUIRED(默认值):在有transaction状态下执行:如当前没有transaction,则创建新的transaction: SUPP ...

  6. Linux下的sleep()和sched_yield()(转)

    阿里四面被问到了这个问题,一脸懵逼,下来也没找到什么阐述这个的文章,就自己查man来对比总结一下吧: sched_yield()的man手册描述如下: DESCRIPTION       sched_ ...

  7. HTML5中使用EventSource实现服务器发送事件

    在HTML5的服务器发送事件中,使用EventSource对象可以接收服务器发送事件的通知. 示例: es.html <!DOCTYPE html> <html> <he ...

  8. cesium地形瓦片(HeightMap)格式

    目录 1.瓦片切分规则 2..terrain瓦片格式分析 参考资料: heightmap 1.0 Tile Map Service Specification 国内主要地图瓦片坐标系定义及计算原理 H ...

  9. linux系统错误码大全

    #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #defi ...

  10. QT5 编译提示 cannot find GL/gl.h ubuntu16.04

    安装软件: sudo apt-get install mesa-common-dev sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev