1.Python网络编程
通过上节课的学习,我知道了其实原来网络编程对所有开发语言都是一样的,Python也不例外。用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。
2.socket()函数
Python网络编程主要基于socket实现,通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标的计算机的IP地址和端口号,再指定协议类型就可以了。
3.服务端案例
import socket
import threading
#服务器端 TCP面向连接
servessoket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
servessoket.bind(('172.16.0.111',9999))#绑定服务地址和端口号
servessoket.listen(5)#监听,最多可连接5个客户端
print('正在等待客户端。。。')
c=servessoket.accept()#等待接收客户端,c是元组表示得到客户端的地址和端口
print(c)
import threading
#服务器端 TCP面向连接
servessoket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
servessoket.bind(('172.16.0.111',9999))#绑定服务地址和端口号
servessoket.listen(5)#监听,最多可连接5个客户端
print('正在等待客户端。。。')
c=servessoket.accept()#等待接收客户端,c是元组表示得到客户端的地址和端口
print(c)
def myrerv(c):
while True:
msg=c[0].recv(1024)#接收消息
print(msg.decode())#decode解码
threading._start_new_thread(myrerv,(c,))
while True:
msg=c[0].recv(1024)#接收消息
print(msg.decode())#decode解码
threading._start_new_thread(myrerv,(c,))
def myinput():#发送消息
while True:
msg=input()
c[0].send(msg.encode())#encode编码
threading._start_new_thread(myinput())
while True:
msg=input()
c[0].send(msg.encode())#encode编码
threading._start_new_thread(myinput())
4.客户端案例
import socket
import threading
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('172.16.0.112',9999))
print('客户端已连接。。。')
import threading
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('172.16.0.112',9999))
print('客户端已连接。。。')
def myrerv(c):
while True:
msg=c.recv(1024)#接收消息
print(msg.decode())
threading._start_new_thread(myrerv,(client,))
while True:
msg=c.recv(1024)#接收消息
print(msg.decode())
threading._start_new_thread(myrerv,(client,))
def myinput():
while True:
msg =input()
client.send(msg.encode())
threading._start_new_thread(myinput())
while True:
msg =input()
client.send(msg.encode())
threading._start_new_thread(myinput())
5.函数
s.recv()接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其它信 息,通常可以忽略。
s.send()发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
s.sendall()完整发送TCP数据,完整发送UDP数据。将string中的数据完整发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
s.connect()主动初始化TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
s.listen()开始TCP监听。backlog指定在拒绝之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
s.bind()绑定地址(host,port)到套接字,在AF_INET以下,以元组(host,port)的形式表示地址。
s.send()发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
s.sendall()完整发送TCP数据,完整发送UDP数据。将string中的数据完整发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
s.connect()主动初始化TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
s.listen()开始TCP监听。backlog指定在拒绝之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
s.bind()绑定地址(host,port)到套接字,在AF_INET以下,以元组(host,port)的形式表示地址。