首页 > 其他 > 详细

socket基础

时间:2016-03-12 22:33:41      阅读:275      评论:0      收藏:0      [点我收藏+]

 

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”(unix 系统出现的时候,网络协议还没有出来),对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

socket和file的区别:

  • file模块是针对某个指定文件进行【打开】【读写】【关闭】
  • socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

下面是socket 在客户端和server 端通讯的具体情况

技术分享

 

socket 作为“文件“来实现网络的通讯的基本情况

运行方式: 先运行socket_server,然后运行socket-client

实现的情况,客户端发送的一句话,服务器发送一句话

基本的形式

技术分享
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import socket
 5 
 6 ip_port = (127.0.0.1,9999)
 7 
 8 sk = socket.socket()
 9 sk.bind(ip_port)    ###实现到服务器上申请端口,开启服务的情况
10 sk.listen(5)     ####最大允许链接5个
11 
12 while True:
13     print(server waiting...)
14     conn,addr = sk.accept()   ###在服务器端,开启端口后,默认是阻塞状态
15 
16     client_data = conn.recv(1024)    ###接收客户端的数据
17     print(str(client_data,utf8))  ###打印客户端的数据
18     conn.sendall(bytes(不要回答,不要回答,不要回答,utf8))   ###给客户发送数据    ####socket发送和接收的过程是使用的bytes 形式
19 
20     conn.close()
socket-server
技术分享
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import socket    ######导入socket 模块
 4 ip_port = (127.0.0.1,9999)  ##定义一个ip加端口的元组
 5 
 6 sk = socket.socket()  ###实例化一个socket
 7 sk.connect(ip_port)   ###调用上面提到的定义的元组   connect 去实现连接
 8 
 9 sk.sendall(bytes("请求占领地球",encoding=utf8))   ###发送数据的写法   ###bytes的形式
10 
11 server_reply = sk.recv(1024)   ###定义一个接收到的数据的限制
12 print(str(server_reply,utf8))  ###打印接收到的信息,    ###字符串的形式
13 
14 sk.close()    ###关闭socket
socket-client

 

二   在socket 基础上,添加功能实现了,和qq聊天类似的功能(你说一句,我说一句,继续下去)

运行方式:先运行socket_server,然后运行socket-client,两边都有输入

代码如下:

技术分享
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import socket
 5 
 6 ip_port = (127.0.0.1,9999)
 7 
 8 sk = socket.socket()
 9 sk.bind(ip_port)
10 sk.listen(5)     ####最大允许链接5个
11 
12 while True:
13     print(server waiting...)
14     conn,addr = sk.accept()
15 
16     client_data = conn.recv(1024)
17     print(str(client_data,utf8))
18     conn.sendall(bytes(不要回答,不要回答,不要回答,utf8))
19     while True:     ######用while 循环来实现输入
20         client_data = conn.recv(1024)   ###接收client的输入
21         print(str(client_data,utf8))   ###打印输入
22         server_response = input("\033[31;1m>>:\033[0m").strip()  ###实现颜色的区分   ,这个需要后续再琢磨颜色的问题
23         conn.send(bytes(server_response,utf8))   ###发送用户输入的内容
24     conn.close()
socket-server-2
技术分享
 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("请求占领地球",encoding=utf8))
10 
11 server_reply = sk.recv(1024)
12 print(str(server_reply,utf8))
13 
14 while True:  ###使用循环实现 多次说话
15     user_input = input(">>:").strip()
16     sk.send(bytes(user_input,utf8))  ##发送client 端的输入
17     server_reply = sk.recv(1024)   ##接收server 端发送的内容
18     print(str(server_reply,utf8))  ##
19 
20 sk.close()
socket-client-2

 

三  在二的基础上,修改一下,实现了一个server 和clienta通讯,当clienta 关闭了,开启clientb 时,能在server 不关闭的情况和clientb 实现通讯

运行方式:先运行socket_server,然后运行socket-clienta, 然后关闭clienta,开启clientb, 能实现了clientb 和server的通讯

在代码实现的过程中,为了简化形式,只是client发送什么内容,server返回client 发送的内容

代码如下:

技术分享
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import socket
 5 
 6 ip_port = (127.0.0.1,9999)
 7 
 8 sk = socket.socket()
 9 sk.bind(ip_port)
10 sk.listen(5)     ####最大允许链接5个
11 
12 while True:
13     print(server waiting...)
14     conn,addr = sk.accept()
15 
16     client_data = conn.recv(1024)
17     print(str(client_data,utf8))
18     conn.sendall(bytes(不要回答,不要回答,不要回答,utf8))
19     while True:
20         try:
21             client_data = conn.recv(1024)
22             print(str(client_data,utf8))
23         except Exception:    ########因为client 断开,server端程序会异常,为了让这个现象不再出现,而设置的这个异常处理
24             print("client closed,break")
25             break                ###只要出现任何异常,break 跳出while  执行conn.close()
26         conn.send(client_data)
27     conn.close()
28 
29 
30 
31 
32 ‘‘‘
33 try:            ###抓异常的语法
34 client_data = conn.recv(1024)
35 print(client_data)
36 except Exception:   ###所有的异常都处理
37 break
38 ‘‘‘
socket-server-3
技术分享
 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("请求占领地球",encoding=utf8))
10 
11 server_reply = sk.recv(1024)
12 print(str(server_reply,utf8))
13 
14 while True:
15     user_input = input(">>:").strip()
16     sk.send(bytes(user_input,utf8))
17     server_reply = sk.recv(1024)
18     print(str(server_reply,utf8))
19 
20 sk.close()
socket-client-3

 

socket基础

原文:http://www.cnblogs.com/qing-add/p/5270109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!