Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)

时间:2021-11-07 07:20:32

http://www.cnblogs.com/wupeiqi/articles/5040823.htmlhttp://i.cnblogs.com/EditPosts.aspx?postid=5543730

 scoket基础

client端口最多有65535  2**16

在三次握手执行完之后,所有的通信都是基于socket来完成的

不管是http、dns、ftp、smtp、ssl、mysql都是基于socket实现的

可以认为socket是一条管道或者高速公路,对于http、dns等是一辆车

socket也叫套接字,用于描述IP和端口,app通常通过scoket向网络发出请求或者应答网络请求

socket连续交互通信

server端代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket ip_port = ('127.0.0.1',9999) sk = socket.socket() #默认TCP/IP协议
sk.bind(ip_port) #以元祖形式传进来,绑定IP端口
sk.listen(5) #监听 while True:
print('server waiting...')
conn,addr = sk.accept() #等待链接进来
client_data = conn.recv(1024)
print(str(client_data,'utf8'))
conn.sendall(bytes('不要回答,不要回答,不要回答','utf8'))
conn.close()

socket_server

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket ip_port = ('127.0.0.1',9999) sk = socket.socket() #默认TCP/IP协议
sk.bind(ip_port) #以元祖形式传进来,绑定IP端口
sk.listen(5) #监听 while True:
try:
print('server waiting...')
conn,addr = sk.accept() #等待链接进来
client_data = conn.recv(1024)
print(str(client_data,'utf8'))
conn.sendall(bytes('不要回答,不要回答,不要回答','utf8'))
while True:
try:
client_data = conn.recv(1024)
if not client_data:
break
except Exception:
break
print(str(client_data, 'utf8'))
# server_response = input("\033[31;1m>>:\033[0m").strip()
# conn.send(bytes(server_response,'utf8'))
conn.send(client_data) conn.close()

scoket_server2

client端代码

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ip_port = ('127.0.0.1',9999) sk = socket.socket()
sk.connect(ip_port) sk.sendall(bytes('请求占领地球','utf8')) server_reply = sk.recv(1024)
print(str(server_reply,'utf8'))
sk.close()

scoket_client

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ip_port = ('127.0.0.1',9999) sk = socket.socket()
sk.connect(ip_port) sk.sendall(bytes('请求占领地球','utf8')) server_reply = sk.recv(1024)
print(str(server_reply,'utf8'))
while True:
user_input=input(">>:").strip()
sk.send(bytes(user_input,'utf8'))
server_reply =sk.recv(1024)
print(str(server_reply, 'utf8'))
sk.close()

scoket_client2

python 3的socket坑

由于以上代码在执行的时候会在Linux和Windows显示的效果不一样

区别如下:

Windows:

Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)

Windows也可修改如下,和Linux一样的效果(可以试下,可能不行)

Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)

Linux:

Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)