socket模块

其实不只是Python,例如C#,Java等都会有这个模块

百度百科:socket是一种操作系统提供的进程间通信机制。[1] 在操作系统中,通常会为应用程序提供一 组应用程序接口(API),称为套接字接口(英语:socket API)。应用程序可以通过套接字接口,来使用网络套接字,以进行数据交换。最早的套接字接口来自于4.2 BSD,因此现代常见的套接字接口大多源自Berkeley套接字(Berkeley sockets)标准。在套接字接口中,以IP地址及通信端口组成套接字地址(socket address)。远程的套接字地址,以及本地的套接字地址完成连线后,再加上使用的协议(protocol),这个五元组(five-element tuple),作为套接字对(socket pairs),之后就可以彼此交换数据。例如,在同一台计算机上,TCP协议与UDP协议可以同时使用相同的port而互不干扰。
操作系统根据套接字地址,可以决定应该将数据送达特定的行程或线程。这就像是电话系统中,以电话号码加上分机号码,来决定通话对象一般。

概念太复杂,只需记住这个Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。是用来写网络编程的,比如说TCP,UDP通信,新手入门的话一般都是用写两个Py文件,一个是服务器(server),一个是客户端(可以写多个客户端,一起和server通信)

UDP和TCP对比

TCP:安全,在进行通信之前必须先建立一个连接,该连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。这种类型的通信也称为虚拟电路或流套接字。

UDP:不安全,与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。
在通信开始之前并不需要建立连接。此时,在数据传输过程中并无法保证它的顺序性、可靠性或重复性。数据报确实保存了记录边界,这就意味着消息是以整体发送的,而并非首先分成多个片段。

代码

server

首先是用socket创一个对象
参数:SOCK_DGRAM
AF_INET:面向网络的套接字,一般写用这个,除此之外还有一个套接字是面向文件的–>AF_UNIX
SOCK_STREAM:TCP套接字(固定的) 如果写的是UDP则用:

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
ddress='127.0.0.1'     #127.0.0.1是监听本机port=12345             #监听自己的哪个端口buffsize=1024          #接收从客户端发来的数据的缓存区大小

服务器代码

   server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    server.bind(("0.0.0.0", 9001))    server.listen()    conn, addr = server.accept()    while True:        # info = input('>>>')  # 输入数据,编码并发送给客户端        # info = info.encode('utf-8')        # conn.send(info)        c_info = conn.recv(5120).decode('utf-8')  # 接受客户端消息并解码        if len(c_info)>0:            print(c_info)        #conn.send(data="I am server,message is dealing")    conn.close()    server.close()

我使用的host是 0.0.0.0,可以实现任意连接
(在这里写的都是单向通信,也就是客户端向服务器发送数据)

client

import socketif __name__ == '__main__':    # 获取本机计算机名称    hostname = socket.gethostname()    # 获取本机ip    ip = socket.gethostbyname(hostname)    #client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    client  = socket.socket()    client.connect((ip, 9001))    while True:        info = input('>>>')  # 输入数据,编码并发送给服务端        info = info.encode('utf-8')        client.send(info)        s_info = client.recv(1024)  # 接受服务端的消息并解码        s_info = s_info.decode(encoding='utf-8')        print(s_info)        if s_info == 'bye':  # 如果服务端发送的消息为bye,回复bye,结束循环            client.send(b'bye')            print('bye_1')            break    client.close()

(另外一个角度来说,也可以用现成的网络调试助手来向写好的TCP服务器发数据)

最后面把server的代码跑在Linux系统上,也可以接受任意电脑(客户端)发来的数据
后期的话就把GPRS写成一个TCP的客户端,就可以实现硬件跟服务器通信

后面的话就是解决一些多个客户端对服务器发数据,在服务器那里将数据识别,分出数据来自哪个下位机,分清楚之后就开始对数据进行一个检验和存入数据库的操作。

©著作权归作者所有:来自51CTO博客作者Oo_。oO的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. PHP:oop->抽象类/接口/后期静态绑定/单例模式连接数据库 Db类中
  2. C++基础学习----->函数与各种数据结构
  3. 全国各地车牌查询表-收录及时更新的应用数据
  4. php之单例模式连接数据库
  5. DBA运维常用SQL脚本
  6. IDC发展之道
  7. 浅谈数据治理
  8. SQL执行过程详解
  9. 浅谈数据迁移

随机推荐

  1. 移动端开发新趋势Flutter
  2. Android(安卓)Layout 之TableLayout
  3. 绝对让你理解Android中的Context
  4. 一些 Android(安卓)小知识点的总结
  5. Android(安卓)Handler使用的安全问题
  6. android 最简单的圆角阴影效果
  7. eclipse下android工程目录讲解
  8. 用eclipse编写Android程序时怎样生成apk
  9. Android开源项目--工具库篇
  10. Android地图获取详细街道地址信息 精确定