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:
Windows也可修改如下,和Linux一样的效果(可以试下,可能不行)
Linux: