11.网络编程:socket、服务端、客户端
socket:
socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。python中使用socket来进行网络连接传输
由图可知:
socket中客户端需要进行的操作是:建立,连接,传输数据 ,接收数据,关闭连接
服务端需要进行的操作是:建立,绑定IP地址和端口,等待连接,接收数据,传输数据 ,关闭连接
服务端:
- 建立:socket.socket()
- 绑定端口:bind(('IP地址',端口)),其中地址和端口号是一个 tuple
- 监听:listen()
- 接受连接:accept(),返回值是一个连接实例和一个地址,地址是连接过来的客户端地址,而数据操作要利用这个连接实例
- 传输数据:send(),传输的数据必须是字节流,所以对字符串数据需要使用encode()
- 接收数据read:recv(x),传输的数据必须是字节流,x是接收的字节数,如果需要转成Unicode,需要使用decode()
- 关闭连接close:close()
import socket
server=socket.socket()#建立socket
server.bind(('localhost',1234))#绑定
server.listen()#监听
print("开始等待。。。")
conn,addr=server.accept()#接收连接
print("连接成功")
data=conn.recv(1024)#接收数据
print(data.decode())
conn.send(data)#发送数据
server.close()#关闭连接
print("--------------------")- 上述代码存在一个问题:只能接受一次连接,连接结束后,服务端socket将关闭,更改成不立即关闭能等待下一个连接的:
#服务器端
import socket
server = socket.socket()
server.bind(('localhost',1234)) #绑定ip和端口
server.listen(5) #监听
print("开始等待")
while True:
conn, addr = server.accept()
print(conn, addr)
print("客户端连接")
while True:
data = conn.recv(1024)
print("recv:",data)
if not data:
print("连接断开...")
break
conn.send(data)
server.close()客户端:
- 建立:socket.socket()
- 连接:connect(('IP地址',端口)),其中地址和端口号是一个 tuple
- 传输数据:send(),传输的数据必须是字节流,所以对字符串数据需要使用encode()
- 接收数据recv:recv(),传输的数据是字节流,如果需要转成Unicode,需要使用decode()
- 关闭连接close:close()
import socket
client=socket.socket()#建立socket
client.connect(('localhost',1234))#连接
client.send("你好".encode())#发送数据
data=client.recv(1024)#接收数据
print(data.decode())
client.close()#关闭连接- 上述代码存在一个问题:只能发送一次数据,发生完数据就会断开连接,改成可以多次发送数据,不自动断开的【前提是服务端能接收多次】:
import socket
client=socket.socket()
client.connect(('localhost',1234))
while True:
cmd=input(">>")
if len(cmd)==0:
continue
client.send(cmd.encode())
cmd_res=client.recv(1024)
print(cmd_res.decode())
client.close() 相关推荐
架构技术交流 2020-04-14
kikaylee 2020-03-03
digwtx 2020-09-14
ITxiaobaibai 2020-07-26
efeve 2020-09-14
poplpsure 2020-08-17
libowenhit 2020-07-23
luckykapok 2020-07-06
hongsheyoumo 2020-06-27
jannal 2020-06-21
lanmantech 2020-06-16
咻咻ing 2020-06-16
weibingbingnet 2020-06-14
woyanyouxin 2020-06-04
houjinkai 2020-06-03
txj 2020-06-02