python socket网络编程
Posted 我的下铺刚田武
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python socket网络编程相关的知识,希望对你有一定的参考价值。
计算机通过网卡通信,一台计算机可以有多个网卡。
通信线路可传递各种类型的数据,遵循不同的通信协议。
socket:相当于通信双方的端口。
机器上最多开放的端口数:65535.
建立连接需要IP地址和端口号。
每个机器有IP地址,有端口号,通信时找到IP地址,再找到具体的端口号,因为机器上可以同时运行很多程序,所以需要同时开放很多端口。
发送端伪代码:
import socket socket.TCP/IP connect(server.ip,server.port) socket.send(‘hello,world‘) socket.recv() #发送端也可以接收服务器传来的数据 socket.close() #关闭端口
服务器端伪代码:
import socket socket.TCP/IP listen(0.0.0.0,1234) #0.0.0.0是IP地址,一个服务器可以有多个IP地址,每个IP地址下有多个端口,接收数据时需要指定IP地址和端口 #0.0.0.0是指所有IP地址,1234是端口号 socket.waiting() #等待数据传来 socket.recv() send() #服务器也可以发送数据
socket families(地址簇,网络层):
socket.AF_UNIX 进程通过内存通信,不经过硬盘
socket.AF_INET IPV4,网络层
socket.AF_INET6 IPV6
socket types(传输层):
socket.SOCK_STREAM #for tcp协议
socket.SOCK_DGRAM #for udp协议
socket.SOCK_RAW #原始套接字,处理底层、原始的数据ICMPIGMP等网络报文;更改IP地址;
真代码:
服务器端:
import socket server=socket.socket() server.bind((‘localhost‘,9696)) server.listen() print(‘开始等待‘) conn,addr=server.accept() #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址 print(conn,addr) print(‘电话来了‘) data=conn.recv(1024) print(‘receive:‘, data) conn.send(data.upper()) server.close()
客户端:
import socket
client=socket.socket() #声明socket类型,同时生成socket连接对象
client.connect((‘localhost‘,9696))
# client.send(b"hello,world.") #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文
client.send("胖虎就是刚田武".encode(‘utf-8‘)) #中文转换为bytes
data=client.recv(1024)
print(‘recv:‘,data.decode()) #把bytes转换为utf-8
client.close()
多次传输信息:
服务器端:
import socket server=socket.socket() server.bind((‘localhost‘,9696)) server.listen() print(‘开始等待‘) conn,addr=server.accept() #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址 print(‘电话来了‘) while True: data=conn.recv(1024) print(type(data)) #data是bytes类型 print(type(data.decode())) #data.decode()是str类型 print(‘receive:‘,data.decode()) #收到的是bytes,需要decode()解码成string conn.send(data.upper()) server.close()
客户端:
import socket client=socket.socket() #声明socket类型,同时生成socket连接对象 client.connect((‘localhost‘,9696)) # client.send(b"hello,world.") #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文 # client.send("胖虎就是刚田武".encode(‘utf-8‘)) #中文转换为bytes while True: massage=input(‘输入要发送的内容:‘).strip() client.send(massage.encode(‘utf-8‘)) data=client.recv(1024) print(‘receive:‘,data.decode()) client.close()
以上是关于python socket网络编程的主要内容,如果未能解决你的问题,请参考以下文章
Python--网络编程-----socket代码实例--聊天软件升级版