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()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 5 ip_port = ('127.0.0.1',9999) 6 7 sk = socket.socket() #默认TCP/IP协议 8 sk.bind(ip_port) #以元祖形式传进来,绑定IP端口 9 sk.listen(5) #监听 10 11 while True: 12 try: 13 print('server waiting...') 14 conn,addr = sk.accept() #等待链接进来 15 client_data = conn.recv(1024) 16 print(str(client_data,'utf8')) 17 conn.sendall(bytes('不要回答,不要回答,不要回答','utf8')) 18 while True: 19 try: 20 client_data = conn.recv(1024) 21 if not client_data: 22 break 23 except Exception: 24 break 25 print(str(client_data, 'utf8')) 26 # server_response = input(" 33[31;1m>>: 33[0m").strip() 27 # conn.send(bytes(server_response,'utf8')) 28 conn.send(client_data) 29 30 conn.close()
client端代码
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 ip_port = ('127.0.0.1',9999) 5 6 sk = socket.socket() 7 sk.connect(ip_port) 8 9 sk.sendall(bytes('请求占领地球','utf8')) 10 11 server_reply = sk.recv(1024) 12 print(str(server_reply,'utf8')) 13 sk.close()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 ip_port = ('127.0.0.1',9999) 5 6 sk = socket.socket() 7 sk.connect(ip_port) 8 9 sk.sendall(bytes('请求占领地球','utf8')) 10 11 server_reply = sk.recv(1024) 12 print(str(server_reply,'utf8')) 13 while True: 14 user_input=input(">>:").strip() 15 sk.send(bytes(user_input,'utf8')) 16 server_reply =sk.recv(1024) 17 print(str(server_reply, 'utf8')) 18 sk.close()
python 3的socket坑
由于以上代码在执行的时候会在Linux和Windows显示的效果不一样
区别如下:
Windows:
Windows也可修改如下,和Linux一样的效果(可以试下,可能不行)
Linux: