博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于TCP协议的socket编程
阅读量:4340 次
发布时间:2019-06-07

本文共 2034 字,大约阅读时间需要 6 分钟。

什么是socket

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 而程序的pid是同一台机器上不同进程或者线程的标识。

TCP协议的特点:

  1.可靠传输。数据从本地发送出去之后,本地内的缓存数据不会清空,只有当服务端收到客户端的应答后,才清除缓存,否则,在规定的时间内则重新发送数据。TCP提供超时重发,丢弃重复数据,检验数据,等功能,保证数据能从一端传到另一端。 

  2.字节流协议。

  3。面向连接。在数据进行传输之前,服务端与客户端必须建立一个双向的连接后,方能传输数据,因此是面向连接服务。

基于网络类型的套接字家族

套接字家族的名字:AF_INET

(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

代码示例:

服务端

import   socketimport  osimport pickle#创建一个socket对象s  = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#绑定服务端程序的IP地址和端口号s.bind(('127.0.0.1',7895))#开始TCP监听s.listen(5)#设置半连接池的大小#被动接受TCP客户的连接,等待连接的到来while True:    con, add = s.accept()    # print('等待客户端接入')    # 打印客户端的连接信息    print(add)    while True:        try:            # 接收客户端发送的数据            data = int(con.recv(1024))            print(data)            # 打印数据            if data  == 1:                res = os.listdir(os.chdir('c:\\'))                #将列表转换为二进制                res = pickle.dumps(res)                con.send(res)            elif  data == 2:                res = os.getcwd()                res = pickle.dumps(res)                con.send(res)        except Exception:            break    con.close()s.close()
import  socketimport  pickle# from  socket  import  *s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(('127.0.0.1',7895))msg = '''请输入操作序号:    1.打印C盘根目录下的文件    2.打印当前路径    '''print(msg)while True:    str = input('>>>:')    #若输入为空,则重新输入    if not  str:continue    s.send(str.encode('utf-8'))    data = s.recv(1024)    #反序列化    res = pickle.loads(data)    print(res)s.close()

 

 

转载于:https://www.cnblogs.com/liuyinzhou/p/7966740.html

你可能感兴趣的文章
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>