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

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
 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("\033[31;1m>>:\033[0m").strip()
27         # conn.send(bytes(server_response,'utf8'))
28         conn.send(client_data)
29 
30     conn.close()
scoket_server2

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()
scoket_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 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()
scoket_client2

python 3的socket坑

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

区别如下:

Windows:

 

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

Linux:

 

posted @ 2016-05-30 19:53  Yared  阅读(264)  评论(0编辑  收藏  举报