socket编程 ---- python篇
来源:互联网 发布:海南医学院怎么样知乎 编辑:程序博客网 时间:2024/06/16 14:22
之前用java做过套接字编程,现在在学python,想试试python的套接字编程,做了一个小的基础的单线程demo 来解释socket编程。
对于套接字编程,了解更多的就是TCP和UDP两种协议,下面将在基于python的环境下使用两种协议写个小demo
流程如下:
1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。
2.服务器从其连接套接字读取一行字符。
3.服务器将该行字符是否为退出命令,如果是,则关闭服务器,如果不是,服务器则通过连接套接字在发回一串字符到客户机。
4.客户机从其套接字中读取发回的行,然后将该行在其标准输出(监视器)上打印出来。
- TCP篇
# coding: utf-8# python TCP套接字编程 服务器端import socket# TCP逻辑处理函数def tcp(connection, address): print ("add a new client from %s:%s." % address) while True: try: connection.settimeout(5) # 设置连接超时 data = connection.recv(1024) if not data or data == 'quit': # 如果发来数据为空或者quit 则退出 print "quit! cut connection..." break else: print ("server received a string:%s." % data) # 打印服务器接收到的数据 connection.send('welcome to server!') # 发送数据到客户端 except socket.timeout: print "time out..." break connection.close() # 关闭连接def main(): # 创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 8888)) # 绑定本机IP和任意端口(>1024) sock.listen(5) # 监听,等待连接的最大数目为5 print "Server is running..." while True: connection, address = sock.accept() # 接收一个连接,或许连接 tcp(connection, address) # 调用TCP逻辑处理函数if __name__ == '__main__': main()
# coding: utf8# python TCP套接字编程 客户端if __name__ == "__main__": import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个socket sock.connect(('localhost', 8888)) # 连接ip和端口 与服务器端相同 import time time.sleep(1) # 线程睡眠1秒钟后可发送数据 while True: data = raw_input("input a string to server:") # 输入数据,发送到服务器端,quit为退出 if not data or data == 'quit': break sock.send(data) # 发送数据到服务器端 ''' 打印服务器发送来的数据, 设置接收最大字节,如果接收到的数据大于该阀值, 则客户端只能接收到前面该阀值大小的数据,后面的数据将丢失 ''' print sock.recv(1024) # 打印数据 sock.send(b'quit') # 发送退出指令到服务器端 sock.close() # 关闭连接
运行结果:
服务器端 –
客户机端–
- UDP篇
UDP协议不需要先建立连接,根据地址和端口直接互相发送数据即可。
# coding: utf-8# python UDP套接字编程 服务器端import socketdef main(): # 创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_DGRAM:面向流的UDP协议) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('localhost', 8888)) # 绑定本机IP和任意端口(>1024) print "UDP on 8888..." while True: recvData, address = sock.recvfrom(1024) # 获得数据和客户端的地址与端口, 一次最大接收1024字节 print "server is received data:", recvData, "from", ("%s:%s." % address) sock.sendto("ok! I got it.", address) # 发回数据到客户机端if __name__ == '__main__': main()
# coding: utf8# python UDP套接字编程 客户端if __name__ == "__main__": import socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建一个socket, SOCK_DGRAM代表为UDP address = ('localhost', 8888) # 服务器端地址 import time time.sleep(1) # 线程睡眠1秒钟后可发送数据 while True: data = raw_input("input a string to server:") # 输入数据,发送到服务器端,quit为退出 if not data or data == 'quit': break sock.sendto(data, address) # 发送数据到服务器端 ''' 打印服务器发送来的数据, 设置接收最大 字节,如果接收到的数据大于该阀值, 则客户端只能接收到前面该阀值大小的数据,后面的数据将丢失 ''' recvData, address = sock.recvfrom(1024) # 接收服务器端发来的数据 print ("data from server %s:%s is:" % address), recvData sock.close() # 关闭连接
运行结果:
服务器端 –
客户机端–
0 0
- socket编程 ---- python篇
- Python Socket编程基础篇
- Python Socket编程基础篇
- 第十三篇 python基础之socket编程
- Python基础篇之Socket编程 SocketServer
- python socket 编程手记
- Python Socket 编程
- python socket编程
- Python Socket编程
- Python Socket编程范例
- Python socket模块编程
- Python socket编程学习
- python socket编程
- [Python] 网络编程(Socket)
- Python socket编程
- Python socket编程
- Python socket编程
- Python socket 编程
- 求任意多边形面积-有向面积
- Qt Quick事件处理
- ldap 网络账号
- 牛客网-好未来秋招
- linux设置快捷键
- socket编程 ---- python篇
- 1008
- INSERT INTO 中的一种子查询
- 文章标题
- java 线程安全
- JAVA 集合Map的简单使用(HashMap)
- Dungeon Master 【三维BFS】
- Linux系统恢复技术
- Invalid property 'LyMhXnyjjsrDaoImpl' of bean class