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. GoCN每日新闻(2019-11-06)

    GoCN每日新闻(2019-11-06) GoCN每日新闻(2019-11-06) 1. 使用构建标签分离你的测试文件 https://mickey.dev/posts/go-build-tags-t ...

  2. ssl 原理简介

    要想弄明白SSL认证原理,首先要对CA有有所了解,它在SSL认证过程中有非常重要的作用.说白了,CA就是一个组织,专门为网络服务器颁发证书的,国际知名的CA机构有VeriSign.Symantec,国 ...

  3. linux高性能服务器编程 (七) --Linux服务器程序规范

    第七章 LInux 服务器程序规范 1)linux服务器程序一般以后台进程形式运行.后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰.守护进程的父进程通常是init进程(PID为1的进 ...

  4. ex3

    #include <stdio.h> int main() { char ch; printf("please input:\n"); scanf("%c&q ...

  5. layui之table.render使用(含后台详细代码实现)

    效果图如下: 前端实现代码如图(完整代码): <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  6. linux 线程查看 和 Jvm栈线程ID对应

    一.proc查看进程和线程 该方法是个人最为推荐,也最喜欢的一种方法.进程文件下,有几种方式可以获取目前进程开启的进程数. 查看status文件: # cat /proc//status Name: ...

  7. 深度学习剖根问底: Adam优化算法的由来

    在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果?应该用梯度下降,随机梯度下降,还是Adam方法? 这篇文章介绍了不同优化算法之间的主要区别,以及如何选择最佳 ...

  8. MIME类型和Java类型

    MIME类型和Java类型 类型转换Spring Cloud Stream提供的开箱即用如下表所示:“源有效载荷”是指转换前的有效载荷,“目标有效载荷”是指转换后的“有效载荷”.类型转换可以在“生产者 ...

  9. input file上传文件弹出框的默认格式设置

    我们使用html的input 标签type="flie"时,如何设置默认可选的文件格式 <input id="doc_file" type="f ...

  10. UICachedDeviceRGBColor CGImage]: unrecognized selector sent to instance 0xxxxxxxxxxx'

    UICachedDeviceRGBColor CGImage]: unrecognized selector sent to instance 0xxxxxxxxxxx' 报错原因是 本来应该写空间的 ...